特点:在遍历时不依赖索引
一、迭代器遍历
其相关的三种方法
Iterator<E> iterator()//获取一个迭代器的对象
boolean hasNext()//判断当前指向的位置师傅存在元素
E next()//获取当前指向的元素并移动指针
代码实现
Collection<String> coll = new ArrayList<>();
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
//创建集合
Iterator<String> it = coll.iterator();//获取迭代器对象
//迭代器就像一个箭头,默认指向集合0索引的位置
while(it.hasNext()){
System.out.println(it.next);
}
注意点
1、报错(NoSuchElementException)
Collection<String> coll = new ArrayList<>();
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
//创建集合
Iterator<String> it = coll.iterator();//获取迭代器对象
//迭代器就像一个箭头,默认指向集合0索引的位置
while(it.hasNext()){
System.out.println(it.next);
}
System.out.println(it.next);//报错,此时指针处已没有元素
2、迭代器遍历完毕,指针不会复原
如果需要再次遍历,则需再次创建Iterator对象
3、循环中只能用一次next方法
hasNext方法必须与Naxt方法配套使用
4、迭代器遍历时,不能用集合的方法进行增删
如需删除可以使用
void remove();//删除元素
二、增强for循环
格式
for(元素类型 变量名 : 数组或集合){
}
示例
Collection<String> coll = new ArrayList<>();
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
for(String s : coll){
System.out.println(s);//增强for循环
}
//其中s就是一个第三方变量,在循环中依次表示集合中的每一个数据
细节
修改增强for中的变量,不会改变集合中的原本的数据
三、lambda表达式遍历
所需的方法 default void forEach(Consuner<? super T> action);
示例
Collection<String> coll = new ArrayList<>();
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
coll.forEach(s -> System.out.println(s));//利用lambda表达式,简化代码