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之外?