集合删除对象,报错java.util.ConcurrentModificationException

xiaoxiao2022-06-16  39

[b]集合删除对象,报错java.util.ConcurrentModificationException错误 有人说这么搞:[/b] 在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); } } [b]还是不对,其实还有这个问题:[/b] ConcurrentModificationException异常。 经过以上的分析,发现抛出ConcurrentModificationException异常处于调用next()方法时,比较 expectedModCount 和modCount的值,如果两个值不相等,就会抛出异常,然而在什么情况下会使expectedModCount 和modCount的值不相等呢,只有在两个Itr同时对一个list进行操作的时候才会出现这样的问题,所以在以后的编码过程中在是由Iterator 进行remove()时一定要考虑是否时多线程的,如果是请不要用Iterator进行remove(),而应该使用List的remove方法进行。 [b]矛矛盾盾 不通,不通,狗屁不通。。。。[/b]
转载请注明原文地址: https://www.6miu.com/read-4940951.html

最新回复(0)