遍历Collection的两种方式:
① 使用迭代器Iterator
② foreach循环(或增强for循环)
Iterator接口
Iterator实现了集合类的遍历,Collection其定义了接口,我们通过调用其子类的Iterator方法即可,具体集合内部的遍历是如何实现的,由该集合自己定义
集合对象每次调用 iterator() 方法都得到一个全新的送代器对象,仅仅用于遍历
Iterator接口定义了如下方法:
- boolean hasNext( ); //判断游标下个位置是否有元素
- object next( ) //返回游标下边的元素并将游标移动到下一个位置
- void remove( )://删除游标上面的元素,执行完next之后remove操作只能执行一次
循环:
iterator = collection.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
// 第二种写法:
//for(集合元素的类型 局部变量 : 集合对象)
for (Object obj : collection){
System.out.println(obj);
}
Iterator的局限性:
不可在遍历的过程中使用集合对象中的方法操作集合,因为会发生并发修改异常。
要实现只能使用迭代器中定义的方法,如Iterator. remove()
解决方法:
List集合可以使用ListIterator方法获取Iterator的子接口,其支持遍历时集合操作。
它允许列表反向或逆向迭代,同时还可以对迭代对象进行修改。