java.util.ConcurrentModificationException解决办法 来自百度知道

来源:互联网 发布:运行单独的java文件 编辑:程序博客网 时间:2024/05/20 20:17
一:
这个问题是说,你不能在对一个List进行遍历的时候将其中的元素删除掉解决办法是,你可以先将要删除的元素用另一个list装起来,等遍历结束再remove掉可以这样写List delList = new ArrayList();//用来装需要删除的元素for(Information ia:list)if(ia.getId()==k){n++;delList.add(ia);}list.removeAll(delList);//遍历完成后执行删除
二:
ArrayList 遍历的时候做移除会有并发的错误。使用CopyOnWriteArrayList可解决这个问题。 Collection<User> users =  new CopyOnWriteArrayList<User>(); // ArrayList<User>();使用这个会报错。 users.add(new User("aaa","1")); users.add(new User("bbb","2")); users.add(new User("ccc","3")); Iterator<User> it = users.iterator(); while(it.hasNext()){ System.out.println("111"); User user = it.next(); if(user.getName().equals("aaa")){ users.remove(user); }else{System.out.println(user.toString()); } }

三:
用迭代器IteratorIterator ite=list.iterator();while(ite.hasNext()){Object o=ite.next();if(/*此处写你希望o满足的删除条件*/)ite.remove();

四:
不防在if(){.......;}加上break;修改如下:if(ia.getId()==k){n++;list.remove(ia);break;}
注:前面三种方法我没试验,我在自己的代码中就是用了类似第三种的方法才会报出这样的异常。个人感觉那样并没有解决问题,只不过是把遍历搬在了迭代器中而已。第四种方法让我真正解决了问题。break; 很神奇的东西,哈哈。我猜想原因是这里break之后就不在遍历了。所以便不再报出java.util.ConcurrentModificationException