Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:在for-each循环中删除列表中的记录时发生异常_Java_List_Arraylist - Fatal编程技术网

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
    ,并且