集合提供了统一的遍历方式:迭代器。迭代器(Iterator)是一个对象,它的工作是遍历并选择序列中的对象,它提供了一种访问一个容器对象中的各个元素,而又不暴露该对象内部细节的方法。通过迭代器,开发人员不需要了解容器底层的结构,就可以实现对容器的遍历。由于创建迭代器的代价小,因此迭代器通常被称为轻量级的容器。
迭代器的使用主要有以下3个方面的注意事项:
(1)使用容器的iterator()方法返回一个Iterator,然后通过Iterator的next() 方法返回第一个元素。
(2)使用Iterator的hasNext() 方法判断容器中是否还有元素,如果有,可以使用next()方法获取下一个元素。(使用next()的前提是必须有hasNext(),并且返回值为true)
(3)可以通过remove() 方法删除迭代器返回的元素。(非必须)
Iterator支持派生的兄弟成员。ListIterator只存在于List中,支持在迭代期间向List中添加或删除元素,并且可以在List中双向滚动。
Iterator接口的操作原理:Iterator是专门的迭代输出接口,迭代输出就是将元素一个个进行判断,判断其是否有内容,如果有内容则把内容取出。
package com.haobi;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
/*
* 迭代器
*/
public class IteratorDemo {
public static void main(String[] args) {
List<String> list = new LinkedList<String>();
list.add("first");
list.add("second");
list.add("third");
list.add("fourth");
for(Iterator<String> iter = list.iterator();iter.hasNext();) {
String str = (String)iter.next();
System.out.println(str);
}
}
}
//程序输出结果如下:
first
second
third
fourth
在使用iterator()方法时经常会遇到ConcurrentModificationException异常,这通常是由于在使用Iterator遍历容器的同时又对容器做增加或删除操作所导致的,或者由于多线程操作导致,当一个线程使用迭代器遍历容器的同时,另一个线程对这个容器进行增加或删除操作。
解决方法如下:在遍历的过程中把需要删除的对象保存到一个集合中,等遍历结束后再调用removeAll()方法来删除,或者使用iter.remove()方法。