【问题标题】:Concurrent Modification Exception with ArrayListArrayList 的并发修改异常
【发布时间】:2012-12-24 08:12:46
【问题描述】:

ConcurrentModificationException 有问题。

我定义了一个 ArrayListComplex 类。我添加了两个Complexes,并尝试为每个循环做一个,但我得到了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();
        }

【问题讨论】:

  • 不应该dots.clear()temp.clear()在对应的for之外吗?

标签: java arraylist java.util.concurrent concurrentmodification


【解决方案1】:

您不能在迭代集合时对其进行修改。如果你要移动dots.clear();和 temp.clear() 外部迭代;它会得到解决。如果需要,您可以在需要清除这些集合时创建一个标志;迭代结束后,你可以清除它们。

【讨论】:

    【解决方案2】:

    大多数迭代器实现不允许修改底层结构,除非它具有迭代器本身定义的语义(remove 方法)。

    因此,在您清除结构的所有代码部分中 对其进行迭代,您将获得ConcurrentModificationException

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-15
      • 1970-01-01
      • 2014-10-08
      • 2016-11-19
      相关资源
      最近更新 更多