概述
集合删除对象,报错java.util.ConcurrentModificationException错误
有人说这么搞:
在Map或者Collection的时候,不要用它们的API直接修改集合的内容,如果要修改可以用Iterator的remove()方法,例如:
public void setReparation( Reparation reparation ) {
for (Iterator it = this.reparations.iterator();it.hasNext();){ //reparations为Collection
Reparation repa = (Reparation)it.next();
if (repa.getId() == reparation.getId()){
this.reparations.remove(repa);
this.reparations.add(reparation);
}
}
}
如上写会在运行期报ConcurrentModificationException,可以如下修改:
public void setReparation( Reparation reparation ) {
boolean flag = false;
for (Iterator it = this.reparations.iterator();it.hasNext();){ //reparations为Collection
Reparation repa = (Reparation)it.next();
if (repa.getId() == reparation.getId()){
it.remove();
flag = true;
break;
}
}
if(flag){
this.reparations.add(reparation);
}
}
还是不对,其实还有这个问题:
ConcurrentModificationException异常。
经过以上的分析,发现抛出ConcurrentModificationException异常处于调用next()方法时,比较 expectedModCount 和modCount的值,如果两个值不相等,就会抛出异常,然而在什么情况下会使expectedModCount 和modCount的值不相等呢,只有在两个Itr同时对一个list进行操作的时候才会出现这样的问题,所以在以后的编码过程中在是由Iterator 进行remove()时一定要考虑是否时多线程的,如果是请不要用Iterator进行remove(),而应该使用List的remove方法进行。
矛矛盾盾 不通,不通,狗屁不通。。。。
最后
以上就是哭泣宝马为你收集整理的集合删除对象,报错java.util.ConcurrentModificationException的全部内容,希望文章能够帮你解决集合删除对象,报错java.util.ConcurrentModificationException所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复