0

我在java中有一个小问题。我正在尝试遍历一个 ArrayList 并在循环期间将更多项目添加到同一个数组列表中,并且正在获得并发修改异常。这个问题的解决方法是什么,我的代码是这样的

ArrayList“错误”已填充。

ArrayList<MainErrorObject> errors;
ArrayList<MainErrorObject> newList;

for (MainErrorObject current : errors)
{
   newList = processErrorObjects(current);
   errors.addall(newList);
}

当我尝试执行上面的代码时,我得到了并发修改异常。请帮我解决这个问题。

提前致谢。

4

3 回答 3

2

你不能迭代和修改同一个集合。所以有一个临时的 ArrayList 并在迭代完成时将内容复制到主列表。

ArrayList<MainErrorObject> tempErrors;
for (meObject : Errors) {

  newList = processErrorObjects();
  tempErrors.addAll(newList);

}
errors.addAll(tempErrors);

ps:遵循java命名约定

于 2013-09-10T18:31:29.800 回答
1

Use ListIterator.

To avoid java.util.ConcurrentModificationException exception, we can add an item through the iterator of list

for (ListIterator<MainErrorObject> itr = Errors.listIterator(); itr.hasNext();) {
      newList = processErrorObjects(itr.next());
      for (MainErrorObject obj : newList) {
          itr.add(obj);
      }

}
于 2013-09-10T18:38:27.363 回答
1

您可以使用Iterator该类并使用add()from 的方法Iterator,如下所示:

ListIterator<MainErrorObject> it = Errors.listIterator();
MainErrorObject me = null;

while(it.hasNext()) {
   me = it.next();
   if (//condition)
       it.add(item);
}

它永远不会抛出这样的异常,因为它足够聪明来处理所说的并发修改。

来源:ListIterator javadocs

于 2013-09-10T18:30:56.767 回答