当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/