删除ArrayList中的元素时出现ConcurrentModificationException [using iterator.remove()]

时间:2013-09-05 06:41:27

标签: java exception arraylist concurrentmodification

我知道我们不应该在迭代期间修改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 

      }

    }

}

2 个答案:

答案 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。