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

Java如何在迭代时从“ ArrayList”中删除元素时如何避免“ ConcurrentModificationException”?

严承允
2023-03-14
问题内容

我正在尝试从这样的ArrayList迭代中删除一些元素:

for (String str : myArrayList) {
    if (someCondition) {
        myArrayList.remove(str);
    }
}

当然,ConcurrentModificationException当我尝试同时从列表中删除项目时,我会得到一个提示myArrayList。有解决此问题的简单方法吗?


问题答案:

使用Iterator和致电remove()

Iterator<String> iter = myArrayList.iterator();

while (iter.hasNext()) {
    String str = iter.next();

    if (someCondition)
        iter.remove();
}


 类似资料:
  • 我试图从中删除一些元素,同时像这样迭代它: 当然,当尝试在迭代的同时从列表中删除项时,我会得到一个。有没有一些简单的解决方案来解决这个问题?

  • 问题内容: 我有一个要迭代的ArrayList。遍历它时,我必须同时删除元素。显然,这引发了。 解决此问题的最佳实践是什么?我应该先克隆列表吗? 我删除的不是循环本身的元素,而是代码的另一部分。 我的代码如下所示: 可能打电话; 问题答案: 两种选择: 创建要删除的值的列表,将其添加到循环中的列表中,然后在最后调用 在迭代器本身上使用该方法。请注意,这意味着你不能使用增强的for循环。 作为第二个

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

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

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

  • 我想要一个数组列表,并限制元素删除。我该怎么做?