为什么此代码会引发并发修改异常?

时间:2015-06-04 12:45:03

标签: java

代码:

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循环来避免。

1 个答案:

答案 0 :(得分:1)

因为增强的for循环创建了一个隐式迭代器,并且您没有使用该迭代器从列表中删除元素。

如果要在迭代时从列表中删除元素,则需要使用相同的迭代器执行此操作:

Iterator<Integer> iterator = l.iterator();
while (iterator.hasNext()) {
  int i = iterator.next();
  // ...
  iterator.remove();
}

使用增强的for循环不能做同样的事情。