为什么 Iterator.next() 抛出 ConcurrentModificationException

2022-09-03 06:10:31

足够扼杀的是,这一小段代码抛出了上面提到的异常。另外,看看网络上发布的代码,这似乎是正确的:

import java.util.ArrayList;
import java.util.Iterator;

public class IteratorTest {

    ArrayList<Integer> arr = new ArrayList<Integer>();

    Iterator i = arr.iterator();

    public void show() {
        arr.add(2);
        arr.add(5);
        arr.add(9);

        while(i.hasNext()){
            System.out.println(i.next());
        }
    }
}

有什么建议吗?谢谢


答案 1

此调用:

Iterator i=arr.iterator();

应该在你完成所有写入 ArrayList 之后。

因此,在代码中,在开始迭代之前执行此操作,如下所示:

Iterator i=arr.iterator();
while(i.hasNext()) {
...
}

答案 2

这是因为您已经修改了获取迭代器和调用 之间的后备列表。iterator()next()

迭代器的典型用法是:

for (Iterator<Integer> iter=arr.iterator(); iter.hasNext(); ) {
    Integer element = iter.next();
}

或者更好的是,使用新的 for-each 循环:

for (Integer element: arr) {
}

确保在循环之外执行对集合的添加。