Java ArrayList的并发修改异常
我对Java ArrayList的并发修改异常,java,arraylist,java.util.concurrent,concurrentmodification,Java,Arraylist,Java.util.concurrent,Concurrentmodification,我对ConcurrentModificationException有问题 我定义了一个Complex类的ArrayList。我添加了两个Complexes,并尝试为每个循环执行一次操作,但得到了ConcurrentModificationException。然而,当我删除该行时,我没有得到任何错误。我需要这些初始点(1,0),(-1,0)来计算我以后需要的点 for (Iterator<Complex> num = dots.iterator(); num.hasNe
ConcurrentModificationException
有问题
我定义了一个Complex
类的ArrayList
。我添加了两个Complex
es,并尝试为每个循环执行一次操作,但得到了ConcurrentModificationException
。然而,当我删除该行时,我没有得到任何错误。我需要这些初始点(1,0)
,(-1,0)
来计算我以后需要的点
for (Iterator<Complex> num = dots.iterator(); num.hasNext();) {
// ConcurrentModificationException
Complex aComplex = num.next();
// clone it and clear
temp.add(new Complex(aComplex));
dots.clear();
}
for(迭代器num=dots.Iterator();num.hasNext();){
//ConcurrentModificationException
复杂aComplex=num.next();
//克隆并清除它
临时添加(新复合物(复合物));
圆点。清晰();
}
在对集合进行迭代时,不能对其进行修改。如果你想移动点。清除();以及迭代外部的清除温度();它会得到解决。如果需要,您可以在需要清除这些集合时创建标志;迭代结束后,您可以清除它们。大多数迭代器实现不允许修改底层结构,除非它在迭代器本身上具有定义的语义(方法remove
)
因此,在代码的所有部分中,当您在迭代时清除结构时,您将得到一个ConcurrentModificationException
不应该dots.clear()
和temp.clear()
在相应的for之外?