Java 为什么下面使用迭代器next()和remove()的代码会抛出ConcurrentModificationException?
我测试了Java 为什么下面使用迭代器next()和remove()的代码会抛出ConcurrentModificationException?,java,iterator,Java,Iterator,我测试了Iterator接口的next()和remove()方法。我得到了以下例外: 线程“main”java.util.ConcurrentModificationException中出现异常 这是我的密码: import java.util.*; public class ListTest { public static void main(String[] args) { Collection<Integer> list = new ArrayList
Iterator
接口的next()
和remove()
方法。我得到了以下例外:
线程“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);
}
}
import java.util.*;
公共类列表测试{
公共静态void main(字符串[]args){
集合列表=新的ArrayList();
迭代器迭代器=list.Iterator();
集合.addAll(列表,1,2,3,4,5);
if(iterator.hasNext()){
iterator.next();
iterator.remove();
}
系统输出打印项次(列表);
}
}
使用迭代器的next()
和remove()
没有问题
您的ConcurrentModificationException
是在创建迭代器后向列表添加元素造成的
在创建迭代器之前,应将元素添加到列表中
更改:
Iterator<Integer> iterator = list.iterator();
Collections.addAll(list, 1, 2, 3, 4, 5);
Iterator Iterator=list.Iterator();
集合.addAll(列表,1,2,3,4,5);
致:
Collections.addAll(列表,1,2,3,4,5);
迭代器迭代器=list.Iterator();
循环将正常工作。出现此异常是因为您在创建迭代器后通过添加元素修改了列表的状态,因此在迭代器上调用next()
时,在内部,它检查基础列表
是否已修改,如果已修改,则会引发ConcurrentModificationException
尝试将顺序反转为下一步:
Collections.addAll(list, 1, 2, 3, 4, 5);
Iterator<Integer> iterator = list.iterator();
Collections.addAll(列表,1,2,3,4,5);
迭代器迭代器=list.Iterator();
可能最好以重复的方式结束,因为这里的答案完全没有解释异常情况。@DenysSéguret你是对的,我在答案中添加了更多细节来解释一点more@NicolasFilotto现在你回答这个问题:)@DenysSéguret这是如此忘恩负义的一面,如果你花太多时间回答问题,你会得到更少的选票,有时最好先提供一个快速而肮脏的答案,然后再改进我根本不回答,然后投票以重复的形式结束,因为他们已经回答得很好了。。。我不认为复制内容有什么意义。
Collections.addAll(list, 1, 2, 3, 4, 5);
Iterator<Integer> iterator = list.iterator();