1. Java中iterator迭代器
class="java">
迭代器(Iterator)是一个对象,它的工作是遍历并选择序列中的对象,它提供了一种访问一个容器(container)对象中的各个元素,而又不必暴露该对象内部细节的方法。
通过迭代器,开发人员不需要了解容器底层的结构,就可以实现对容器的遍历。由于创建迭代器的代价小,因此迭代器通常被称为轻量级的容器。
迭代器的使用主要有以下三个方面的注意事项:
1) 使用容器的iterator()方法返回一个Iterator,然后通过Iterator的next()方法返回第一个元素。
2) 使用Iterator()的hasNext()方法判断容器中是否还有元素,如果有,可以使用next()方法获取下一个元素。
3) 可以通过remove()方法删除迭代器返回的元素。
import java.util.HashSet;
import java.util.Iterator;
public class InteratorTest {
public static void main(String[] args){
HashSet set = new HashSet();
set.add("a");
set.add("b");
set.add("c");
set.add("d");
set.add("e");
// Iterator iter = set.iterator();
// while(iter.hasNext()){
// String value = (String)iter.next();
// System.out.println(value);
// }
for(Iterator iter = set.iterator(); iter.hasNext(); ){
String value = (String)iter.next();
System.out.println(value);
}
}
}
运行结果:
d
e
b
c
a
2. iterator迭代器改变时发生ConcurrentModificationException异常
在迭代的时候如果同时对其进行修改就会抛出java.util.ConcurrentModificationException异常
import java.util.ArrayList;
import java.util.Iterator;
public class InteratorTest {
public static void main(String[] args){
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(4);
list.add(3);
list.add(2);
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()){
Integer integer = iterator.next();
if (integer==2) {
list.remove(integer);
} else {
System.out.println(integer);
}
}
}
}
运行结果:
4
3
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
at com.test.sort.InteratorTest.main(InteratorTest.java:13)
在使用arraylist的remove()方法就会出现问题,需要使用iterator.remove()方法就不会出现问题了
import java.util.ArrayList;
import java.util.Iterator;
public class InteratorTest {
public static void main(String[] args){
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(4);
list.add(3);
list.add(2);
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()){
Integer integer = iterator.next();
if (integer==2) {
// list.remove(integer);
iterator.remove();
} else {
System.out.println(integer);
}
}
}
}
运行结果:
4
3
推荐博客:
https://blog.csdn.net/dove_knowledge/article/details/71023512
https://www.cnb
logs.com/andy-zhou/p/5339683.html