gpt4 book ai didi

删除 ArrayList 时出现 Java ConcurrentModificationException

转载 作者:行者123 更新时间:2023-12-02 02:11:04 25 4
gpt4 key购买 nike

当ArrayList的Size为2时,我们使用foreach循环执行删除操作,它会打印最后一个元素,不会抛出异常,

例如:

ArrayList<String> a= new ArrayList<String>(Arrays.asList("abc","xyz"));
for(String i : a){
a.remove(i);
}
// a contains "xyz"

但是当我们将 arrayList 的大小增加到超过 2 并执行该操作时,它会显示并发修改异常。为什么它会表现出这样的行为(它适用于 2 个元素,但不适用于超过 2 个元素)?

最佳答案

ArrayList 不是线程安全的,当你改变它的结构和迭代时,你可能会遇到这种类型的麻烦。

您需要使用迭代器在迭代集合时安全地从集合中删除。

ArrayList<String> a= new ArrayList<String>(Arrays.asList("abc","xyz"));
for (Iterator<String> iterator = a.iterator(); iterator.hasNext();) {
String string = iterator.next(); // pick one element

// do some stuffs with the content

iterator.remove(); // remove element
}

关于删除 ArrayList 时出现 Java ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50028381/

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