我有带for循环的代码,而且我总是有并发修改异常,而且我不知道如何解决它[重复]

问题描述 投票:-4回答:1

此问题已经在这里有了答案:

我正在为学校编程一个分类系统,该系统必须将一些人分成两辆车,但是我被卡住了,我不知道如何继续。

[当我删除第二个时,它正在工作。但是我在那里需要它,所以我不知道该怎么办。

我已经尝试过迭代器,但是我在Kotlin中是新手,但是没有用。

for (firstPeople in firstCar){
                    when {
                        k.contains(firstPeople.toString()) -> secondCar.add(j)
                        // println(secondCar)
                        k.contains(firstPeople.toString()) -> firstCar.add(j)
                        // println(firstCar)
                        else -> when {
                            firstCar.size > secondCar.size -> secondCar.add(j)
                            firstCar.size < secondCar.size -> firstCar.add(j)
                            else -> firstCar.add(j)
                        }
                    }
                }

错误:

Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
at java.util.ArrayList$Itr.next(ArrayList.java:859)
at MainKt.main(Main.kt:65)
at MainKt.main(Main.kt)

非常感谢您的回答。

for-loop kotlin concurrentmodification
1个回答
1
投票

看起来像您正在使用ArrayList。并且您正在通过迭代器进行迭代时在其中插入项目:(firstCar.add(j)。这是its JavaDoc所说的内容:

由此类的iteratorlistIterator方法返回的迭代器是快速失败的:如果在创建迭代器之后的任何时间对列表进行结构修改,则可以通过迭代器自己的remove或[C0 ]方法,迭代器将抛出add。因此,面对并发修改,迭代器会快速干净地失败,而不会在未来的不确定时间内冒任意,不确定的行为的风险。

这意味着您只能使用迭代器方法修改集合,而不能直接修改。

尝试避免列表修改,或使用迭代器的ConcurrentModificationException方法,或在写集合上使用副本。

© www.soinside.com 2019 - 2024. All rights reserved.