在Map或者Collection的时候,不要用它们的API直接修改集合的内容(否则会出现 java.util.ConcurrentModificationException 异常),如果要修改可以用Iterator的remove()方法,例如:
如上写会在运行期报ConcurrentModificationException,可以如下修改:
请问, 按照代码一写出现异常的原因是什么啊?
- 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);
- }
- }
请问, 按照代码一写出现异常的原因是什么啊?
为什么使用 Iterator来删除集合里面的数据就没有异常呢?
转载于:http://www.iteye.com/topic/124788