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



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

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

我已经尝试过迭代器,但我是 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)

非常感谢您的回答。

看起来您正在使用并ArrayList.在通过迭代器迭代时,您将在其中插入一个项目:(firstCar.add(j).以下是它的JavaDoc所说的:

此类的iteratorlistIterator方法返回的迭代器是快速失败的:如果在创建迭代器后的任何时间对列表进行结构修改,则除了通过迭代器自己的removeadd方法之外,迭代器将抛出ConcurrentModificationException。因此,面对并发修改,迭代器会快速而干净地失败,而不是冒着在未来不确定的时间出现任意、非确定性行为的风险。

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

尽量避免列表修改,或使用迭代器的add方法,或在写入集合上使用复制。

相关内容

最新更新