提问者:小点点

java.util.concurrentModificationException,但我迭代的是一个副本,而不是我要修改的集合


在标记重复之前,请阅读我的问题的描述。

private void cleanTrash() {

    HashMap<String, OutfitInfo> tempOutfits = outfits;
    Iterator iter = tempOutfits.entrySet().iterator();
    while (iter.hasNext()) {
        Map.Entry mapElement = (Map.Entry) iter.next();
        String key = (String) mapElement.getKey();
        OutfitInfo info = (OutfitInfo) mapElement.getValue();
        if (info.getParentID().equals(trashID)) {
            outfits.remove(key);
        }
    }
    HashMap<String, ItemInfo> tempItems = items;
    iter = tempItems.entrySet().iterator();
    while (iter.hasNext()) {
        Map.Entry mapElement = (Map.Entry) iter.next();
        String key = (String) mapElement.getKey();
        ItemInfo info = (ItemInfo) mapElement.getValue();
        if (info.getParentID().equals(trashID)) {
            items.remove(key);
        }
    }

}

在上面的代码中,我得到了并发修改异常。 我知道这个错误意味着我不能在迭代集合时修改它。 但是,我在分配迭代器之前制作了集合的副本,并且正在修改的集合不是正在迭代的集合。 那么为什么我仍然会收到这个消息,我该如何修复它呢?


共1个答案

匿名用户

hashmap; tempOutfits=outfits;不创建副本。 变量tempoutfitsoutfits都指向同一个实例。

如果你真想复制,你可以这样做

 HashMap<String, OutfitInfo> tempOutfits = new HashMap<>(outfits);