gpt4 book ai didi

java - ArrayList 的 isEmpty() 方法出现 ConcurrentModificationException

转载 作者:搜寻专家 更新时间:2023-11-01 02:37:27 25 4
gpt4 key购买 nike

我有以下代码:

Map<String, List<String>> map;
for(String k : map.keySet()){
List<String> list = map.get(k);
boolean empty = list.isEmpty();//CME
if(!empty && somecheck(k, ...)){
list.clear();
}
}

我在 isEmpty() 方法中得到 ConcurrentModificationException。列表是一个 ArrayList。没有其他线程修改列表,因为它之前是在这个方法中创建的(也是 all 映射)。唯一修改列表的地方是 clear(),但它在 isEmpty() 之后调用并且循环不能在一个列表上执行两次。

我正在使用 java 1.7

java.util.ConcurrentModificationException
at java.util.ArrayList$SubList.checkForComodification(ArrayList.java:1169)
at java.util.ArrayList$SubList.size(ArrayList.java:998)
at java.util.AbstractCollection.isEmpty(AbstractCollection.java:86)

最佳答案

从您给出的堆栈跟踪来看,似乎在实现 SubList 功能的子类中抛出异常 - 我假设您 map 中的列表实际上是另一个列表的子列表?

大概发生的事情是您在创建子 ListView 后修改基础列表(请记住,子列表只是另一个列表的 View - 它不采用独立副本)。

与其将子列表放入 map ,不如尝试复制一份,例如:

map.put(key, new ArrayList(originalList.subList(start, end));

关于java - ArrayList 的 isEmpty() 方法出现 ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44281509/

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