为什么Iterator.next()抛出ConcurrentModificationException

JBo*_*Boy 15 java iterator while-loop

勉强的是,这段小代码抛出了上面提到的Exception.另外,查看网络上发布的代码似乎是正确的:

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());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么建议?谢谢

anu*_*ava 13

这个电话:

Iterator i=arr.iterator();
Run Code Online (Sandbox Code Playgroud)

应该是在完成对ArrayList的所有写入之后.

所以在您的代码中,在开始迭代之前执行此操作:

Iterator i=arr.iterator();
while(i.hasNext()) {
...
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*Kuo 6

这是因为您已经修改了通过iterator()和调用获取迭代器之间的支持列表next()

迭代器的典型用法是:

for (Iterator<Integer> iter=arr.iterator(); iter.hasNext(); ) {
    Integer element = iter.next();
}
Run Code Online (Sandbox Code Playgroud)

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

for (Integer element: arr) {
}
Run Code Online (Sandbox Code Playgroud)

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