在您盯着另一个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语法。
答案 0 :(得分:19)
看看你的循环:
while (true) {
for (Integer j : jList) {
zList.add(17);
System.out.println(j);
}
jList = zList;
}
在外循环的第二次迭代中,jList
和zList
引用相同的列表(由于jList = zList;
语句)...所以当你添加到{{1在你的内部循环中,你正在修改你正在迭代的列表。邦。