我在java中有一个小问题。我试图循环遍历ArrayList并在循环期间向同一个arraylist添加更多项目并获得concurrentModificationexception。解决这个问题的方法是什么,我的代码是这样的
ArrayList“Errors”已经填充。
ArrayList<MainErrorObject> errors;
ArrayList<MainErrorObject> newList;
for (MainErrorObject current : errors)
{
newList = processErrorObjects(current);
errors.addall(newList);
}
当我尝试执行上面的代码时,我得到并发修改异常。请帮我解决这个问题。
提前致谢。
答案 0 :(得分:2)
你不能迭代&amp;修改同一个集合。因此,有一个临时的ArrayList,并在迭代完成后将内容复制到主列表中。
ArrayList<MainErrorObject> tempErrors;
for( meObject : Errors ){
newList = processErrorObjects();
tempErrors.addAll(newList);
}
Errors.addAll(tempErrors);
Ps:遵循java命名约定
答案 1 :(得分:1)
您可以使用Iterator
课程并使用add()
中的Iterator
方法,如下所示:
ListIterator<MainErrorObject> it = Errors.listIterator();
MainErrorObject me = null;
while(it.hasNext()) {
me = it.next();
if (//condition)
it.add(item);
}
永远不会抛出这样的异常,因为它足够聪明地处理所说的并发修改。
答案 2 :(得分:1)
使用ListIterator。
为了避免java.util.ConcurrentModificationException异常,我们可以通过list的迭代器添加一个项目
for (ListIterator<MainErrorObject> itr = Errors.listIterator(); itr.hasNext();)
{
newList = processErrorObjects(itr.next());
for( MainErrorObject obj : newList)
{
itr.add(obj);
}
}