集合边遍历边删除 ,add

it2022-05-05  120

【错误原因】

对于remove操作,list.remove(o)的时候,只将modCount++,而expectedCount值未变,那么迭代器在取下一个元素的时候,发现该二值不等,则抛ConcurrentModificationException异常。 对于add操作,同remove 具体可以参看这里:http://hi.baidu.com/sdausea/blog/item/57b2fa3dcb101908bba1672e.html 【解决办法】

remove:用iterator提供的原生态remove() add:同remove就错了,iterator没有提供原生的add()方法。真是的,还要用新的容器暂存,然后再遍历结束后,全部添加到原容器当中。

set/list:这两类常用容器,就用上面说的方法remove(), add()就好了。

map:直接使用ConcurrentHashMap就ok。为什么别的容器,不也实现个concurrent版本直接用。。?库里不搞,自己搞。

【正确使用案例】

for (Iterator it = list.iterator(); it.hasNext()) { String val = it.next(); if (val.equals(“5”)) { it.remove(); } } List newList = new ArrayList(); for (Iterator it = list.iterator(); it.hasNext()) { String val = it.next(); if (val.equals(“5”)) { newList.add(val); } } list.addAll(newList);


最新回复(0)