在标记重复之前,请阅读我的问题的描述。
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);
}
}
}
在上面的代码中,我得到了并发修改异常。 我知道这个错误意味着我不能在迭代集合时修改它。 但是,我在分配迭代器之前制作了集合的副本,并且正在修改的集合不是正在迭代的集合。 那么为什么我仍然会收到这个消息,我该如何修复它呢?
hashmap
不创建副本。 变量tempoutfits
和outfits
都指向同一个实例。
如果你真想复制,你可以这样做
HashMap<String, OutfitInfo> tempOutfits = new HashMap<>(outfits);