并发修改异常: 当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
// ConcurrentModificationException
产生的原因:
迭代器是依赖于集合而存在的,在判断成功之后,集合当中增加了新的元素,而迭代器却不知道,所以就报错了,这个就叫并发修改异常。
package cn.hhy.test_04;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListIteratorDemo2 {
public static void main(String[] args) {
//创建集合对象
List list = new ArrayList();
//添加对象
list.add("hello");
list.add("world");
list.add("java");
//迭代器遍历
Iterator it = list.iterator();
while(it.hasNext()){
String string = (String) it.next();
//ConcurrentModificationException
if(string.equals("world")){
list.add("javaee");
}
}
System.out.println("list:"+list);
}
}
所报的错误:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at cn.hhy.test_04.ListIteratorDemo2.main(ListIteratorDemo2.java:23)
也就是迭代器遍历元素的时候,集合不能进行修改元素。
解决方案:
- 1.迭代器迭代元素,迭代器修改元素:元素跟在刚才迭代元素之后
ListIterator lit = list.listIterator();
while(lit.hasNext()){
String string = (String) lit.next();
//ConcurrentModificationException
if(string.equals("world")){
lit.add("javaee");
}
}
- 2.集合遍历元素,集合修改元素(普通的for):元素跟在集合最后一个元素之后。
for(int i=0;i<list.size();i++){
String s = (String)list.get(i);
if(s.equals("world")){
list.add("javaee");
}
}
如果你觉得文章不错 ,也麻烦扫码领红包支持一下。或者打开支付宝首页搜“529823781”领红包,领到红包,早点使用哟。也算是对我的一点点支持了。