主题:java.util.ConcurrentModificationException 异常解决办法

来源:互联网 发布:linux设置命令行启动 编辑:程序博客网 时间:2024/05/17 02:32

在Map或者Collection的时候,不要用它们的API直接修改集合的内容(否则会出现 java.util.ConcurrentModificationException 异常),如果要修改可以用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);
        }
    }

有更好的方式,欢迎大家补充
原创粉丝点击