代码:
public static void main(String[] arf) {
List<Integer> l = new ArrayList<>();// Having a list of integers
l.add(1);
l.add(2);
l.add(3);
for (int i : l) {
l.remove(i);
}
System.out.println(l);
}
我想知道背后这个例外的原因。我知道内部有一个迭代器用于每个迭代器,这可以通过使用while循环来避免。
答案 0 :(得分:1)
因为增强的for循环创建了一个隐式迭代器,并且您没有使用该迭代器从列表中删除元素。
如果要在迭代时从列表中删除元素,则需要使用相同的迭代器执行此操作:
Iterator<Integer> iterator = l.iterator();
while (iterator.hasNext()) {
int i = iterator.next();
// ...
iterator.remove();
}
使用增强的for循环不能做同样的事情。