`

ConcurrentModificationException

阅读更多
当直接使用Iterator(而不是通过一个增强的for循环间接使用)时,重要的是要记住一个基本的法则:如果对正在迭代的集合进行结构上的变化(即对集合使用了add,remoce或clear方法),那么迭代器就不再合法(并且在其后使用该迭代器会有ConcurrentModificationException异常被抛出),为避免迭代器准备给出某一项作为下一项(next item)而该项此法则。这意味着,只有在需要立即使用一个迭代器的时候,我们才应该获取迭代器。然而,如果迭代器调用了它自己的remove方法,那么这个迭代器就任然是合法的。这是有时候我们更愿意使用迭代器的remove方法。

说了这么多就说 在集合结构改变时,如果继续进行操作就会抛出 ConcurrentModificationException

此时你得选择用Iterator提供的方法remove操作,当然也可以:
你不能在对一个List进行遍历的时候将其中的元素删除掉
解决办法是,你可以先将要删除的元素用另一个list装起来,等遍历结束再remove掉
可以这样写
List delList = new ArrayList();//用来装需要删除的元素
for(Information ia:list)
if(ia.getId()==k){
n++;
delList.add(ia);
}
list.removeAll(delList);//遍历完成后执行删除

当然这效率肯定不能和前者比较
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics