集合删除对象,报错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 异常问题详解1
java.util.ConcurrentModificationException 解决方法 在使用iterator.hasNext()操作迭代器的时候,如果此时迭代的对象发生改变,比如插入了新数据,或者有数据被删除。 则使用会报以下异常: Java.util....
本文通过对数据压缩算法的简要介绍,然后以详细的示例演示了利用java.util.zip包实现数据的压缩与解压,并扩展到在网络传输方面如何应用java.util.zip包现数据压缩与解压
1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
详细介绍了java.util.logging.Logger的用法和结构,对如果扩展Logger起到抛砖引玉的作用!尊重劳动成果,亲下载了要给个评价!
Tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError),内附解决方案!
主要给大家介绍了关于tomcat启动报:java.util.zip.ZipException错误的解决方法,文中通过示例代码介绍的非常详细,同样遇到这个问题的朋友可以参考借鉴,下面随着小编来一起学习学习吧
Exception in thread “main“ java.util.InputMismatchException
主要介绍了出现java.util.ConcurrentModificationException 问题及解决办法的相关资料,需要的朋友可以参考下
java.util.Date与java.sql.Date互转及字符串转换为日期时间格式.docx
java.util.concurrent系列文章(1) java.util.concurrent系列文章(1) java.util.concurrent系列文章(1) java.util.concurrent系列文章(1)
java并发工具包 java.util.concurrent中文版-带书签版
详细介绍java.util.Date和java.sql.Date相互转换的多种方法总结,希望对大家有帮助
主要介绍了java.util.concurrent.ExecutionException 问题解决方法的相关资料,需要的朋友可以参考下
这是我在编写struts2中遇到的问题,整理出来,包括截图,希望可以帮到大家
java.util包
java.util包源码,pdf版,方便打印
世界范围内的时区列表。由 java.util.TimeZone 类导出