Java:在for-each循环中删除列表中的记录时发生异常
我有一个列表,我想循环遍历该列表,并根据某些条件删除一些记录。我就是这么做的Java:在for-each循环中删除列表中的记录时发生异常,java,list,arraylist,Java,List,Arraylist,我有一个列表,我想循环遍历该列表,并根据某些条件删除一些记录。我就是这么做的 public void foo(List<Bar> recordList){ for(Bar bar : recordList){ if(bar.someCondition()){ recordList.remove(bar); } } } public void foo(列表记录列表){ 用于(条形:记录列表){ if(
public void foo(List<Bar> recordList){
for(Bar bar : recordList){
if(bar.someCondition()){
recordList.remove(bar);
}
}
}
public void foo(列表记录列表){
用于(条形:记录列表){
if(bar.someCondition()){
记录列表。删除(条);
}
}
}
此代码生成异常。如果我使用迭代器,那么它可以正常工作
public void foo(List<Bar> recordList){
Iterator<Bar> iter = recordList.iterator();
while(iter.hasNext()){
Bar bar = iter.next();
if(bar.someCondition()){
iter.remove();
}
}
}
public void foo(列表记录列表){
迭代器iter=recordList.Iterator();
while(iter.hasNext()){
Bar=iter.next();
if(bar.someCondition()){
iter.remove();
}
}
}
我想我的问题是:
文件对此非常清楚
此类迭代器和listIterator方法返回的迭代器故障快速:如果在创建迭代器后的任何时间以任何方式修改列表的结构,除了通过迭代器自己的remove或add方法之外,迭代器将抛出ConcurrentModificationException。因此,在面对并发修改时,迭代器会快速、干净地失败,而不会在将来的不确定时间冒任意、不确定行为的风险。您忘记了返回类型
void
,并且