我知道我们不应该在迭代期间修改ArrayList。
但我正在使用Iterator迭代list而iterator.remove()删除元素但仍会导致ConcurrentModification异常。
我的程序不是多线程的。
我有很多arraylist [类包含它,我正在处理许多对象]
for(int i=0;i<obj.length;i++)
{
if(k==i) continue;
it = obj[i].arraylist.iterator();
while(it.hasNext()){
value = it.next();
if(condn) {
it.remove();
obj[k].arraylist.add(value);
//k and i are not same
}
}
}
答案 0 :(得分:1)
“请注意,Iterator.remove是修改集合的唯一安全方法 在迭代期间;如果底层的行为是未指定的 在迭代进入时,以任何其他方式修改集合 进展“。
您可以在迭代期间删除对象但不添加新对象,这就是您获得ConcurrentModificationException的原因。
http://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html
编辑: 您还可以查看:
if(k==i || obj[i].arraylist == obj[k].arraylist) continue;
答案 1 :(得分:0)
您只能使用it
变量在迭代期间修改List。