一:
这个问题是说,你不能在对一个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()); } }
三:
用迭代器Iterator Iterator 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