Java 如何修复ConcurrentModificationException,从arrayList中删除项?
我想在遍历arrayList时从arrayList中删除一个项,Java 如何修复ConcurrentModificationException,从arrayList中删除项?,java,arraylist,Java,Arraylist,我想在遍历arrayList时从arrayList中删除一个项,arrayList有一个类型类成员。我已经阅读了多个关于如何解决此问题的示例,但是都没有成功,仍然会抛出ConcurrentModificationException Iterator<Members> itr = members.iterator(); while (itr.hasNext()) { Members foundMember = itr.next(); if (foundMember.equals
arrayList
有一个类型类成员。我已经阅读了多个关于如何解决此问题的示例,但是都没有成功,仍然会抛出ConcurrentModificationException
Iterator<Members> itr = members.iterator();
while (itr.hasNext()) {
Members foundMember = itr.next();
if (foundMember.equals(member)){
itr.remove();
}
}
Iterator itr=members.Iterator();
while(itr.hasNext()){
Members foundMember=itr.next();
if(foundMember.equals(member)){
itr.remove();
}
}
编辑当然,我的第一个解决方案是facepalm不正确
如上所述,“.removeIf”很可能是最简单的解决方案
只需使用一个“正常”的循环(我认为这应该是可行的,请看一看
,顺便说一句,“增强for循环”将不起作用
List<Member> list1 = new ArrayList<>();
List<Member> list2 = new ArrayList<>(list1);
for (int i = 0; i < list1.size(); i++) {
Member member = list1.get(i);
...
list2.remove(member);
}
list1 = list2;
List list1=new ArrayList();
List list2=新的数组列表(list1);
对于(int i=0;i
我最终得到的解决方案是,使用CopyOnWriteArrayList,而不是使用remove()方法的ArrayList nad。members.removeIf(m->m.equals(member));
将是一种更简单的方法。此代码本身不会抛出CME:这是在迭代时删除成员的正确方法。成员必须在其他地方更新(或此代码从多个线程调用)。您可以发布整个代码吗!!但您将在下一个索引中跳过该成员