1.遍历Collection的两种方式
① 使用迭代器Iterator
② foreach循环(或增强for循环)
2.java.utils包下定义的迭代器接口:Iterator
2.1说明:
* Iterator对象称为迭代器(设计模式的一种),主要用于遍历 Collection 集合中的元素。
* GOF给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。迭代器模式,就是为容器而生。
2.2作用:
遍历集合Collectiton元素
2.3如何获取实例:
coll.iterator()返回一个迭代器实例
2.4遍历的代码实现:
Iterator iterator = coll.iterator();
//hasNext():判断是否还下一个元素
while(iterator.hasNext()){
//next(): ①指针下移 ②将下移以后集合位置上的元素返回
System.out.println(iterator.next());
}
注意:集合对象每次调用iterator()方法都得到一个新的迭代器对象,默认游标都在集 合的第一个元素之前 --》错误写法二原因
//错误写法一:跳着输出,并出现 NoSuchElementException 异常
while((iterator.next()) != null){
System.out.println(iterator.next());
}
//错误写法二:死循环一直顺出第一个元素
while(coll.iterator().hasNext()){
System.out.println(coll.iterator().next());
}
2.5图示说明:
2.6 remove()的使用:
- 测试Iterator中的remove()
- 如果还未调用next() 或 在上一次调用 next 方法之后已经调用了 remove 方法,再调用 remove 都会报IllegalStateException。
- 内部定义了remove(),可以在遍历的时候,删除集合中的元素。此方法不同于集合直接调用remove()
@Test
public void test3(){
Collection coll = new ArrayList();
coll.add(123);
coll.add(456);
coll.add(new String("Tom"));
//删除集合中"Tom"
Iterator iterator = coll.iterator();
while (iterator.hasNext()){
// iterator.remove();//java.lang.IllegalStateException
Object obj = iterator.next();
if("Tom".equals(obj)){
iterator.remove();
// iterator.remove();//java.lang.IllegalStateException
}
}
//遍历集合
iterator = coll.iterator();//上一个迭代器iterator已经指向集合末尾了,需要重新生成
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
```