0

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

      }

    }

}

4

2 回答 2

1

“请注意,Iterator.remove 是在迭代期间修改集合的唯一安全方法;如果在迭代过程中以任何其他方式修改基础集合,则行为未指定。”

您可以在迭代期间删除对象但不能添加新对象,这就是您得到 ConcurrentModificationException 的原因。

http://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html

编辑:您还可以检查:

if(k==i || obj[i].arraylist == obj[k].arraylist) continue;
于 2013-09-05T06:51:59.863 回答
0

您只能在迭代期间使用it变量修改列表。

于 2013-12-23T09:53:22.380 回答