【发布时间】:2015-11-10 07:22:35
【问题描述】:
据我了解,当您尝试编辑仍在迭代的列表时,您会收到 ConcurrentModificationException。
现在我不明白的是,为什么旧的 foreach 循环没有给出异常,而新的 foreach 循环有?
public void newForeachLoop() {
for (Person person : list) {
if (person.getPosition().equals(this.getPosition())) {
list.remove(person);
}
}
}
public void oldForeachLoop() {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getPosition().equals(this.getPosition())) {
list.remove(list.get(i));
}
}
}
【问题讨论】:
-
是的,两个循环的用途完全相同。
-
@Sky ...看看这个stackoverflow.com/questions/9806421/…
-
oldForeachLoop不使用迭代器。没有迭代器,修改列表没有问题。 -
@digidude 我试图写一些类似的东西,但你是第一个:) 实际上,我认为你应该用一些解释来回答你的评论
-
澄清一下,您的代码中只有一个 for-each 循环。 “oldForeachLoop”只是一个简单的 for 循环。
标签: java loops exception foreach