我有地图结构
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);
}
当我在内部地图的第一次迭代中删除它时,它会从其他地图中删除该键和值对,但这不是我想要的。有什么建议吗?
答案 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));
因为这会为每个计数器创建单独的副本。