如何避免“ConcurrentModificationException”,同时从“ArrayList”中删除元素,同时对其进行迭代?

2022-08-31 04:41:11

我正在尝试从迭代中删除一些元素,如下所示:ArrayList

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

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


答案 1

使用迭代器并调用 remove()

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

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

    if (someCondition)
        iter.remove();
}

答案 2

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

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

这将避免您直接处理迭代器,但需要另一个列表。无论出于何种原因,我一直更喜欢这条路线。