Java 摆脱并发修改异常

Java 摆脱并发修改异常,java,arraylist,Java,Arraylist,我在java中遇到了一个小问题。我正在尝试循环一个ArrayList,并在循环过程中向同一ArrayList添加更多的项,并得到concurrentModificationexception。这个问题的解决方法是什么,我的代码是这样的 ArrayList“Errors”已填充 ArrayList<MainErrorObject> errors; ArrayList<MainErrorObject> newList; for (MainErrorObject curren

我在java中遇到了一个小问题。我正在尝试循环一个ArrayList,并在循环过程中向同一ArrayList添加更多的项,并得到concurrentModificationexception。这个问题的解决方法是什么,我的代码是这样的

ArrayList“Errors”已填充

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

for (MainErrorObject current : errors)
{
   newList = processErrorObjects(current);
   errors.addall(newList);
}
ArrayList错误;
ArrayList新列表;
对于(MainErrorObject当前:错误)
{
newList=processErrorObjects(当前);
errors.addall(newList);
}
当我尝试执行上面的代码时,我得到concurrentmodification异常。请帮我解决这个问题


提前感谢。

您可以使用
迭代器
类并使用
迭代器
中的
add()
方法,如下所示:

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

while(it.hasNext()) {
   me = it.next();
   if (//condition)
       it.add(item);
}
ListIterator it=Errors.ListIterator();
MainErrorObject me=null;
while(it.hasNext()){
me=it.next();
if(//条件)
增加(项目);
}
它永远不会抛出这样的异常,因为它足够聪明来处理所述并发修改


来源:

您可以使用
迭代器
类并使用
迭代器
中的
add()
方法,如下所示:

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

while(it.hasNext()) {
   me = it.next();
   if (//condition)
       it.add(item);
}
ListIterator it=Errors.ListIterator();
MainErrorObject me=null;
while(it.hasNext()){
me=it.next();
if(//条件)
增加(项目);
}
它永远不会抛出这样的异常,因为它足够聪明来处理所述并发修改


来源:

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

ArrayList温度;
对于(对象:错误){
newList=processErrorObjects();
Temperators.addAll(新列表);
}
错误。添加所有(温度);

Ps:遵循java命名约定

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

ArrayList温度;
对于(对象:错误){
newList=processErrorObjects();
Temperators.addAll(新列表);
}
错误。添加所有(温度);
Ps:遵循java命名约定使用

为了避免java.util.ConcurrentModificationException异常,我们可以通过list的迭代器添加一个项

for(ListIterator itr=Errors.ListIterator();itr.hasNext();){
newList=processErrorObjects(itr.next());
对于(MainErrorObject对象:新建列表){
itr.add(obj);
}
}
使用

为了避免java.util.ConcurrentModificationException异常,我们可以通过list的迭代器添加一个项

for(ListIterator itr=Errors.ListIterator();itr.hasNext();){
newList=processErrorObjects(itr.next());
对于(MainErrorObject对象:新建列表){
itr.add(obj);
}
}

这种模式是在迭代完成后添加到临时列表,并将该列表添加到原始列表中。Sry,但是您的代码样式和布局太糟糕了。我将对此进行调整。这种模式是在迭代完成后添加到临时列表并将该列表添加到原始列表中。Sry,但是您的代码样式和布局太糟糕了。我将对此进行调整。OP正在尝试向列表中添加元素,而不是删除元素。OP正在尝试向列表中添加元素,而不是删除元素。请使用公认的Java命名约定,并告诉OP也这样做。@SotiriosDelimanolis不能怪OP,因为我现在用c#编写代码,所以它现在不在我的脑海中:)请使用公认的Java命名约定,并告诉OP也这样做。@SotiriosDelimanolis不能责怪OP,因为我现在用c#编码,所以它现在不在我的脑海中:)嗨@Prabhekar,当我使用列表迭代器时,它不会循环正在添加的新项。我在循环结束时打印了错误的大小,它显示添加了newList中的新项,但迭代器没有在上面循环。hi@Prabhekar,当我使用list迭代器时,它没有在正在添加的新项上循环。我在循环结束时打印了错误的大小,它显示添加了newList中的新项,但迭代器没有在其上循环。