集合删除对象,报错java.util.ConcurrentModificationException
来源:互联网 发布:淘宝网鸭鸭羽绒服 编辑:程序博客网 时间:2024/05/16 03:11
集合删除对象,报错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方法进行。
矛矛盾盾 不通,不通,狗屁不通。。。。
有人说这么搞:
在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
- java.util.ConcurrentModificationException 报错
- for循环遍历删除报错:java.util.ConcurrentModificationException
- java.util.ConcurrentModificationException 与集合删除
- 从集合List中删除对象,正确写法(异常java.util.ConcurrentModificationException
- 从ArrayList中删除对象报java.util.ConcurrentModificationException异常解决
- 从ArrayList中删除对象报java.util.ConcurrentModificationException异常解决
- 从ArrayList中删除对象报java.util.ConcurrentModificationException异常解决
- hibernate更新报错 java.util.ConcurrentModificationException
- HashMap报错:java.util.ConcurrentModificationException
- JAVA集合中删除元素时的java.util.ConcurrentModificationException
- Map中删除数据报:java.util.ConcurrentModificationException异常
- 集合遍历 java.util.ConcurrentModificationException
- Java-6-解决报错:Java.util.ConcurrentModificationException
- java set 删除元素 java.util.ConcurrentModificationException
- java.util.ConcurrentModificationException 集合remove异常
- 修改集合抛出java.util.ConcurrentModificationException
- frameset常用属性
- 控制反转与依赖注入
- 简单实用的C#分词源代码(含词库素材下载)
- 银行钱荒会引发金融危机吗
- uml是什吗东西?
- 集合删除对象,报错java.util.ConcurrentModificationException
- blog 写什么东西
- 系统设计的体系结构------领域(模型)和服务的划分
- 系统设计从什么时候开始
- apache+tomcat 真的能提高性能吗?
- 何时有子类的概念?
- 关于设置socket选项问题
- 新概念(深层模型,柔性设计)
- 敏捷开发的几个大的原则