当前位置: 首页 > 知识库问答 >
问题:

如何避免在迭代ArrayList时从ArrayList中删除元素时出现"并发修改异常"?[重复]

麹飞航
2023-03-14

我试图从ArrayList中删除一些元素,同时像这样迭代它:

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

当然,当尝试在迭代myArrayList的同时从列表中删除项时,我会得到一个ConnettModificationExcema。有没有一些简单的解决方案来解决这个问题?

共有3个答案

萧宁
2023-03-14

Java8用户可以这样做:list.removeIf(…)

    List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
    list.removeIf(e -> (someCondition));

它将删除列表中满足某些条件的元素

赫连俊雄
2023-03-14

作为对其他人答案的替代,我总是这样做:

List<String> toRemove = new ArrayList<String>();
for (String str : myArrayList) {
    if (someCondition) {
        toRemove.add(str);
    }
}
myArrayList.removeAll(toRemove);

这将避免直接处理迭代器,但需要另一个列表。不管什么原因,我总是喜欢这条路线。

花和宜
2023-03-14

使用迭代器并调用remove()

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

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

    if (someCondition)
        iter.remove();
}
 类似资料:
  • 当我使用temp=iterator.next()时,sort方法会导致并发修改错误。你能帮我解决并发修改错误吗。我给出了整个类的代码,但我只是尝试完成sort方法。事先谢谢你的帮助。 我必须对ArrayList中的所有数组进行排序。

  • 问题内容: 我正在尝试从这样的迭代中删除一些元素: 当然,当我尝试同时从列表中删除项目时,我会得到一个提示。有解决此问题的简单方法吗? 问题答案: 使用和致电:

  • 我正在用随机整数填充ArrayList。然后,当我试图删除它们时,我得到了以下错误: 线程“main”java.lang.indexoutOfboundsException:在java.base/jdk.internal.util.preconditions.outofbounds(preconditions.java:64)在java.base/jdk.internal.util.precond

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

  • 问题内容: 如何从ArrayList中删除重复的元素? 问题答案: 如果你不想在中添加重复项,则应考虑为什么要使用允许重复项的。删除重复元素的最简单方法是将内容添加到中(不允许重复),然后将其添加Set回中ArrayList: 当然,这会破坏中的元素顺序。

  • 问题内容: 我有一个,并且我想从中删除重复的字符串。我怎样才能做到这一点? 问题答案: 如果你不想在中添加重复项,则应考虑为什么要使用允许重复项的。删除重复元素的最简单方法是将内容添加到中(不允许重复),然后将其添加回中: 当然,这破坏了中元素的顺序。