gpt4 book ai didi

Java:在 for-each 循环中删除列表中的记录时出现异常

转载 作者:搜寻专家 更新时间:2023-11-01 04:03:29 24 4
gpt4 key购买 nike

我有一个列表,我想遍历该列表并根据某些条件删除一些记录。这是我做的

public void foo(List<Bar> recordList){
for(Bar bar : recordList){
if(bar.someCondition()){
recordList.remove(bar);
}
}
}

此代码生成异常。如果我使用迭代器那么它工作正常

public void foo(List<Bar> recordList){
Iterator<Bar> iter = recordList.iterator();
while(iter.hasNext()){
Bar bar = iter.next();
if(bar.someCondition()){
iter.remove();
}
}
}

我猜我的问题:

  1. 为什么第一段代码不行?

  2. 如何让第一段代码工作?

最佳答案

文档对此非常清楚。

http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html

由此类的 iterator 和 listIterator 方法返回的迭代器是快速失败的:如果在创建迭代器后的任何时间对列表进行了结构修改,除了通过迭代器自己的 remove 或 add 方法以外的任何方式, 迭代器将抛出 ConcurrentModificationException。因此,面对并发修改,迭代器会快速干净地失败,而不是冒着在未来不确定的时间出现任意的、不确定的行为的风险。

关于Java:在 for-each 循环中删除列表中的记录时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7080208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com