Iterator接口

在程序开发中,经常需要遍历集合中的所有元素。

针对这种需求,JDK专门提供了一个接口 java.util.Iterator 。

Iterator 接口也是Java集合中的一员,但它与 Collection 、 Map 接口有所 不同, Collection 接口与 Map 接口主要用于存储元素,而 Iterator 主要用于迭代访问(即遍历) Collection 中的元素,因此 Iterator 对象也被称为迭代器。

想要遍历Collection集合,那么就要获取该集合迭代器完成迭代操作,下面介绍一下获取迭代器的方 法:

public Iterator iterator() //获取集合对应的迭代器,用来遍历集合中的元素的。只能单向移动

 

 

Iterator接口的常用方法:

  public E next() :返回迭代的下一个元素。

  public boolean hasNext() :如果仍有元素可以迭代,则返回 true。

Iterator接口还有删除方法:但是一般不使用

public void remove():从底层集合中移除此迭代器返回的最后一个元素(可选操作)。 

迭代器本身的remove()方法,是在迭代过程中修改集合唯一安全的方式;如果在迭代过程中以任何其它的方式(例如集合本身的删除方法)修改集合将会产生未知的行为。

ArrayList<String> arrs = new ArrayList<String>();
Iterator<String> it = arrs.iterator();
while (it.hasNext()) {
    String arr = it.next();
    if (表达式) {
        it.remove();  // 此方法必须在next()方法调用过后调用。 一次next()方法,一次remove(),否则抛异常
} }

 

迭代:即Collection集合元素的通用获取方式。

  在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。

迭代器的实现原理

  当遍历集合时,首先通过调用t集合的 iterator()方法获得迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素。

 

ListIterator接口

ListIterator接口是List提供的一个特殊的迭代器,除了Iterator接口提供的正常操作外,还允许元素插入和替换以及双向访问。 

 方法:

变量和类型方法描述
void add​(E e)
将指定的元素插入列表(可选操作)。
boolean hasNext()
如果此列表迭代器在向前遍历列表时具有更多元素,则返回 true
boolean hasPrevious()
如果此列表迭代器在反向遍历列表时具有更多元素,则返回 true
E next()
返回列表中的下一个元素并前进光标位置。
int nextIndex()
返回后续调用 next()将返回的元素的索引。
E previous()
返回列表中的上一个元素并向后移动光标位置。
int previousIndex()
返回后续调用 previous()将返回的元素的索引。
void remove()
从列表中删除 next()previous() (可选操作)返回的最后一个元素。
void set​(E e)
用指定的元素替换 next()previous()返回的最后一个元素(可选操作)。 

previous方法向前遍历,next方法向后遍历,使用previous方法之前必须先调用next方法,不然本身光标处在最开头的位置,不能往前移动。

 

增强for

增强for循环(也称for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。

它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。

格式:

for(元素的数据类型 变量 : Collection集合or数组){
    //操作代码
}

它用于遍历Collection和数组。通常只进行遍历元素,不要在遍历的过程中对集合元素进行增删操作。 其必须有被遍历的目标,目标只能是Collection或者是数组。增强for仅仅作为遍历操作出现。

 

 posted on 2021-03-09 08:39  一计  阅读(61)  评论(0)    收藏  举报