当前位置: 首页 > 面试题库 >

在列表迭代期间从java.util.List中删除元素时引发ConcurrentModificationException?

浦德义
2023-03-14
问题内容
@Test
public void testListCur(){
    List<String> li=new ArrayList<String>();
    for(int i=0;i<10;i++){
        li.add("str"+i);
    }

    for(String st:li){
        if(st.equalsIgnoreCase("str3"))
            li.remove("str3");
    }
    System.out.println(li);
}

当我运行此代码时,我将抛出ConcurrentModificationException。

当我从列表中删除指定的元素时,列表似乎不知道其大小已更改。

我想知道这是否是集合和删除元素的常见问题?


问题答案:

我相信这是Iterator.remove()方法背后的目的,是能够在迭代时从集合中删除一个元素。

例如:

Iterator<String> iter = li.iterator();
while(iter.hasNext()){
    if(iter.next().equalsIgnoreCase("str3"))
        iter.remove();
}


 类似资料:
  • 问题内容: 假设我有一个数字列表: 迭代时,如何从列表中删除元素(例如3)? 我尝试了以下代码,但没有成功: 有任何想法吗? 谢谢,博达·西多(Boda Cydo)。 问题答案: 最好的方法通常是建设性地进行-建立所需项目的新列表,而不要删除不需要的项目。例如: 列表理解建立所需的列表,并分配到“全名单切片” ,确保你 不 只是一个重新绑定的名字,但完全替换 内容 ,所以影响是恒等于你想要的“清除

  • AFAIK,有两种方法: 迭代集合的副本 使用实际集合的迭代器 例如, 而且 有没有理由偏爱一种方法而不是另一种方法(例如,由于可读性的简单原因而偏爱第一种方法)?

  • 问题内容: AFAIK有两种方法: 遍历集合的副本 使用实际集合的迭代器 例如, 和 是否有任何理由偏爱一种方法(例如,出于可读性的简单原因而偏爱第一种方法)? 问题答案: 让我举几个例子,并提出一些避免方案。 假设我们有以下藏书 收集并删除 第一种技术是收集所有要删除的对象(例如,使用增强的for循环),并在完成迭代后删除所有找到的对象。 假设你要执行的操作是“删除”。 如果要“添加”此方法也可

  • 我知道不建议在迭代时从列表中删除元素。 您最好使用iterator.remove()、java流,或者将remove复制到外部列表中。 但这段简单的代码正好起作用: 使用安全吗?

  • 问题内容: Python如何在迭代时从列表中删除项目? 问题答案: 你可以使用列表推导来创建一个仅包含你不想删除的元素的新列表: 或者,通过分配给,你可以将现有列表突变为仅包含所需的项目: 如果还有其他引用somelist需要反映更改,则此方法可能很有用。 除了理解之外,你还可以使用itertools。在Python 2中: 或在Python 3中:

  • 我正在尝试编写一种方法,删除每组4个元素中的第一个、第二个和第三个元素。它似乎根本不起作用。有人能帮忙吗?