java如何在迭代HashMap时删除另一项(不是您所持有的项)
我试着在互联网上搜索,以找到一个解决方案,删除另一个项目,但不是你正在访问的项目。不幸的是,没有办法做到这一点
问题就在这里
假设我有一个hashmap和 这些项目是<;0,10>&书信电报;1,20>&书信电报;2,30>
Map<Integer,Integer> map = new HashMap<Integer, Integer>() ;
Iterator<Map.Entry<Integer, Integer> >entries = map.entrySet().iterator();
while (entries.hasNext()) {
Entry<Integer, Integer> entry = entries.next();
int temp = entry.getValue();
if (temp==0){
map.remove(2); //2 is the key of 3th item
}
}
然后问题就来了。 非常感谢你的建议
# 1 楼答案
让我猜猜,你得到了^{}
那是烤熟的。javadocs说,如果你做你正在做的事情,它可能会被抛出。您可以遵循@JBNizet's,也可以在每次删除元素时重新开始迭代。你的选择将取决于你的具体情况
第三个选项是创建条目集的副本并对其进行迭代。如果重新启动迭代的成本很高,并且需要快速删除,那么这种方法效果最好
# 2 楼答案
不能在遍历HashMap时对其进行修改。例如,可以在遍历映射时收集要删除的键列表,然后在完成迭代后从映射中删除列表中的项
# 3 楼答案
分两次进行,首先累积要移除的键,然后执行实际移除:
# 4 楼答案
分两次完成:
Set<Integer>
中收集要删除的密钥