【问题标题】:ArrayList / for-loopArrayList / for 循环
【发布时间】:2014-06-10 00:55:31
【问题描述】:

我的问题很简单:listeBallesArrayList<Balle>,这是我的代码:

for (Balle b : listeBalles) {

        b.changeList(listeBalles);        
}

问题是b.changeList 方法将Balle 添加到ArrayList listeBalles。我认为这就是问题所在。以下是例外情况:

Exception in thread "main" java.util.ConcurrentModificationException

at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)

at java.util.AbstractList$Itr.next(AbstractList.java:343)

at Main.main(Main.java:31)

指向的线是for (Balle b : listeBalles) { 线。

感谢您的帮助。

【问题讨论】:

标签: java for-loop arraylist


【解决方案1】:

是的,你是对的。来自ArrayList的JavaDoc:

这个类的迭代器和listIterator返回的迭代器 方法是快速失败的:如果列表在任何结构上被修改 迭代器创建后的时间,除了通过 迭代器自己的删除或添加方法,迭代器会抛出一个 ConcurrentModificationException。

所以基本上你不能在迭代列表的过程中修改它。您的实际问题是什么?

【讨论】:

  • 感谢您的回答。但我需要这样做,所以我使用了 Puce 的代码并且它起作用了。
【解决方案2】:

由于您无法向当前正在迭代的 ArrayList 添加元素,因此请先复制该列表。

例如试试:

for (Balle b : new ArrayList(listeBalles)) {
        b.changeList(listeBalles);         
}

【讨论】:

    【解决方案3】:

    原因是您正在迭代List并同时对其进行修改。

    【讨论】:

      【解决方案4】:

      在 for-each 循环中迭代集合或数组时,不能修改它的内容。你到底想做什么?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-09
        • 2020-07-18
        • 2013-10-24
        • 2014-03-16
        • 2017-05-02
        • 1970-01-01
        • 2012-04-06
        • 2015-09-02
        相关资源
        最近更新 更多