从嵌套映射中删除元素

时间:2016-08-25 11:29:44

标签: java hashmap

我有地图结构

Map<Integer, Map<String, String>> outerMap= getMap();

for (int count = 0; count < outerMap.size(); count++) {
Map<String, String> innerMap = outerMap.get(count);

String tempValue = innerMap.get("tempKey");
innerMap.remove("tempKey");
someOperations(tempValue);
}

当我在内部地图的第一次迭代中删除它时,它会从其他地图中删除该键和值对,但这不是我想要的。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

可能你正在以错误的方式构建你的地图。

当第一次调用innerMap.remove()实际影响你在第二次迭代中使用的innerMap时,只有一个解释: innerMap 必须是相同对象。

所以我想,当你构建你的地图时,你会做类似的事情:

Map<String, String> mapLaterUsedAsInner = new ...
mapLaterUsedAsInner.put ... gets filled 

然后你有类似

的东西
Map<Integer, Map<String,String>> outerMap = new ...
for (int i=0; i< ...) {
  outterMap.put(i, mapLaterUsedAsInner);

所以重点是:如果你希望你的“内部地图”彼此都是独立,那么他们必须是独立的对象。如果它们不是......则第一次修改会影响它们“全部”(“所有”实际上只是一个对象)!

因此,解决方案可以像以下一样简单:

Map<Integer, Map<String,String>> outerMap = new ...
for (int i=0; i< ...) {
  outterMap.put(i, new HashMap<>(mapLaterUsedAsInner));

因为这会为每个计数器创建单独的副本