从HashMap的HashMap修改元素

时间:2019-04-11 17:26:26

标签: java

说我有

HashMap<String, HashMap<String, Integer>> mapOfMaps = new HashMap<String, HashMap<String, Integer>>();

然后我将元素访问为

Integer foo = mapOfMaps.get('what').get('ever');

最后我更改foo的值,例如:

foo++;

然后,如果我想在哈希图中看到该值的更新,我应该做些

HashMap<String, Integer> map = mapOfMaps.get('what');

然后将新值put

map.put('ever', foo);

这有效,如果我访问mapOfMaps.get('what').get('ever'),我将获得更新的值。但是我的问题是:为什么我不必put map进入mapOfMaps? (即:)

mapOfMaps.put('what', map);

1 个答案:

答案 0 :(得分:1)

您的变量map已经引用了HashMap内部的同一mapOfMaps对象。

HashMap mapOfMaps:
    "what" -> (HashMap)  <- map
        "ever" -> (Integer) 1  <- foo

检索值foo指的是存储在映射中的Integer值,直到执行foo++为止。因为Integer是不可变的,所以foo++真正要做的是将其拆箱,递增,然后再次将其装箱到另一个Integer。现在foo引用了另一个代表新值的Integer对象。

HashMap mapOfMaps:
    "what" -> (HashMap)  <- map
        "ever" -> (Integer) 1         foo -> 2

这说明了为什么需要将值2 put返回到map

但是map未被修改为引用另一个HashMap;它仍然引用与HashMap中相同的mapOfMaps。这意味着不需要put重新回到mapOfMaps,就像2需要重新put重新回到map