【问题标题】:Why this code throws concurrent modification exception? [duplicate]为什么这段代码会抛出并发修改异常? [复制]
【发布时间】:2015-06-04 12:45:02
【问题描述】:

代码:

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

【问题讨论】:

  • 没有办法只是此代码抛出 ConcurrentModificationException。你还在做什么?
  • @Seiyria 是的。试试看。

标签: java


【解决方案1】:

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

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

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

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

【讨论】:

  • 好的..谢谢明白了..我们可以使用当前迭代器删除元素..所以更好的选择是使用带有迭代器的while循环
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多