import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ConcurrentModifcationDemo {
public static void main(String[] args) {
Listlist = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
/**
* 对集合使用迭代器进行获取 获取是判断集合中是否存在 “3” 对象
* 如果存在 则添加一个元素
*/
Iteratori = list.iterator();
while(i.hasNext()) {
String s = i.next();
System.out.println(s);
if(s.equals("3"))
list.add("333");
}
}
}
运行结果:
1
2
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 TestArrayList413.ConcurrentModifcationDemo.main(ConcurrentModifcationDemo.java:23)
此异常引发的原因 是由于迭代器在遍历集合的过程中 集合的长度发生改变而造成的。
Java中不允许 在迭代器遍历集合的时候 修改集合的长度。否则会抛出.ConcurrentModificationException 并发修改异常
解决方案 使用listIterator 详情参见:
https://blog.csdn.net/weixin_39494923/article/details/76599767
https://blog.csdn.net/longshengguoji/article/details/41551491