由于普通的for循环需要索引遍历,无法遍历Java中Set、Map等集合
所以通常用这三种方式遍历集合:
1.增强for
2.迭代器
3.lambda表达式
迭代器是Java中遍历集合的专用遍历方式,
使用方法:
1.使用Iterator首先要引入util中的包
import java.util.Iterator;
2.获取迭代器对象
需要先有一个创建的集合,例:
Collection<String> collection = new ArrayList<>();
collection.add("aaa");
collection.add("bbb");
collection.add("ccc");
获取迭代器对象
Iterator<E> 迭代器变量名 = 集合名.iterator()
Iterator<String> iterator = collection.iterator();
3.使用迭代器方法
迭代器有三种常用的方法
-
next() - 返回迭代器的下一个元素,并将迭代器的指针移到下一个位置
-
hasNext() - 用于判断集合中是否还有下一个元素可以访问
-
remove() - 从集合中删除迭代器最后访问的元素
4.遍历集合
while(iterator.hasNext()){
String str = iterator.next();
if(str.equals("aaa")){
iterator.remove();
}
}
System.out.println(collection);
如果集合中有下一个元素可以访问,就把下一个元素赋值给str,如果集合中有与“aaa”相等的元素,则移除
注意:Java 迭代器是单向遍历的,只能从头到尾遍历
迭代器遍历时,不能使用集合的方法对其修改,只能用迭代器的remove()方法,不然会报如下错误:
错误案例:
while(iterator.hasNext()) {
String str = iterator.next();
if(str.equals("aaa")) {
collection.remove(str);
}
}
报错:
Exception in thread "main" java.util.ConcurrentModificationException
at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1013)
at java.base/java.util.ArrayList$Itr.next(ArrayList.java:967)
at list.iterator.main(iterator.java:19)
如果使用增强for遍历报错也是同理