为什么以下代码使用Iterator next()和remove()抛出ConcurrentModificationException?

hel*_*hel -7 java iterator

我测试了接口的方法next()remove()方法Iterator.我得到以下异常:

线程"main"java.util.ConcurrentModificationException中的异常

这是我的代码:

import java.util.*;

public class ListTest {
    public static void main(String[] args) {
        Collection<Integer> list = new ArrayList<Integer>();
        Iterator<Integer> iterator = list.iterator();

        Collections.addAll(list, 1, 2, 3, 4, 5);
        if (iterator.hasNext()) {
            iterator.next();
            iterator.remove();
        }

        System.out.println(list);
    }
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 6

使用你Iteratornext()remove().没有问题.

ConcurrentModificationExceptionList在创建后添加元素造成的Iterator.

您应该ListIterator创建之前添加元素.

更改:

Iterator<Integer> iterator = list.iterator();
Collections.addAll(list, 1, 2, 3, 4, 5);
Run Code Online (Sandbox Code Playgroud)

至:

Collections.addAll(list, 1, 2, 3, 4, 5);
Iterator<Integer> iterator = list.iterator();
Run Code Online (Sandbox Code Playgroud)

你的循环将正常工作.