线程"AWT-EventQueue-0"中的Java,ArrayList和Exception java.util.ConcurrentModificationException

Joh*_*ith 3 java

我迭代一个ArrayList.如果我使用旧的时尚方式:

for (int i = 0; i < list.size(); i++)
{
    list.get(i).update();;
}
Run Code Online (Sandbox Code Playgroud)

它运行正常.但有了这个:

for (Baseitem item : list)
{
    item.update();
}
Run Code Online (Sandbox Code Playgroud)

它在第一行失败,在ArrayList类中:线程"AWT-EventQueue-0"中的异常java.util.ConcurrentModificationException是的,我在外面删除项目 - 但在迭代时肯定不会.怎么解决这个?我不使用任何线程.

ete*_*nay 9

在迭代该列表时,应避免修改列表中的元素.

使用for (int i...)循环,您不会迭代列表,因此您可以修改其中的元素.

for (Baseitem item : list)循环中,您正在迭代列表,因此修改列表元素将引发ConcurrentModificationException异常.

如果要修改其中的元素,则必须使用循环的第一种形式.

  • 您可以在没有"ConncurrentModificationException"的每个循环期间更改实例的状态,请参阅[http://ideone.com/KL1756](http://ideone.com/KL1756).这实际上取决于OP在`update();`中做了什么 (2认同)