还好JDK为我们提供了一个接口-------Iterator(迭代器),迭代器为各种容器提供了公共的操作接口。这样使得对容器的遍历操作与其具体的底层实现相隔离,达到解耦的效果。
查看Iterator的API我们得知,该接口共有3个方法
查看API发现Collection实现了该接口,也就是说Collection的所有子实现类可使用Iterator的方法,同时在Collection中定义了一个方法iterator()
使用该方法iterator(),要求容器返回一个Iterator对象。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
那我们如何使用迭代器呢?
示例代码如下,关键代码的解释说明已经在注释部分给出,将不再做赘述。
示例代码:
/**
* + 上海尚学堂 shsxt.com
*/
public class TestIterator {
public static void main(String[] args) {
List<String> list= new ArrayList();
list.add("and");
list.add("try");
list.add("your");
list.add("best");
//使用迭代器,对集合Arraylist中的元素进行取出
//调用集合的方法iterator() 获取Iterator接口的实现类对象()
Iterator<String> it=list.iterator();
System.out.println(list.iterator().getClass());//打印的内容是 class java.util.ArrayList$Itr 既是我们的接口的实现类对象
//接口实现类对象,调用方法hasNext()判断集合中是否有元素
boolean b = it.hasNext();
System.out.println(b);
//接口的实现类对象,调用方法next()取出集合中的元素
String s = it.next();
System.out.println("it.next()"+s);
while(it.hasNext()){
/*
* 这里将不会输出"and",因为我们调用一次hasNext,内部的指针就会指向下一个元素
*/
System.out.println(it.next());
}
}
}
/**
*@author 上海尚学堂 shsxt.com
*/
List<String> list2 = new ArrayList<String>();
list2.add("abc");
list2.add("def");
list2.add("g");
Iterator<String> it=list2.iterator();
while(it.hasNext()){
String str=it.next();
if("g".equals(str)){
//该操作会导致程序异常: ConcurrentModificationException
List2.add("b");
}
}
System.out.println(list2); |
/**
* + VX:java8733 获取更多资料和支持
*/
ListIterator<String> it=list2.listIterator();
while(it.hasNext()){
String str=it.next();
if("a".equals(str)){
//子接口ListIterator包含add()方法
it.add("b");
}
}
因篇幅问题不能全部显示,请点此查看更多更全内容