gpt4 book ai didi

java - 不修改列表但仍然得到一个 ConcurrentModificationException

转载 作者:搜寻专家 更新时间:2023-11-01 04:00:58 25 4
gpt4 key购买 nike

在您注视另一个 ConcurrentModificationException 问题之前,这不是典型的 ConcurrentModificationException 问题。

我了解 ConcurrentModificationExceptions,但我不明白为什么我会在以下代码中得到一个。在下面的“for”中,迭代器似乎继续存在于 for 循环之外。 (使用 eclipse 中的调试器,我可以看到迭代器在循环重新启动时保留其 jList 的 modCount 的值。)

public class ForEachTest {
public static void main(String[] args) {
List<Integer> zList = new LinkedList<Integer>();
List<Integer> jList = new LinkedList<Integer>();
jList.add(1);

while (true) {
for (Integer j : jList) {
zList.add(17);
System.out.println(j);
}
jList = zList;
}
}
}

起初我认为这可能是语法糖的问题,但我使用显式迭代器重写了它并遇到了相同的行为。

最后,我能够通过使用单独的初始化步骤将 for 分成一段时间来重写它,所以我不只是为了让它工作而寻求重写。但我想知道这里显示的方式有什么问题。如果可能,我更愿意使用 for-each 语法。

最佳答案

看看你的循环:

while (true) {
for (Integer j : jList) {
zList.add(17);
System.out.println(j);
}
jList = zList;
}

在外循环的第二次迭代中,jListzList 引用同一个列表(由于 jList = zList; 语句)... 所以当你在你的内部循环中添加到 zList 时,你正在修改你正在迭代的列表。砰。

关于java - 不修改列表但仍然得到一个 ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3686400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com