为了账号安全,请及时绑定邮箱和手机立即绑定

在 Java 中更新包含哈希映射的哈希映射的特定值

在 Java 中更新包含哈希映射的哈希映射的特定值

有只小跳蛙 2021-08-19 18:49:05
我有一个outerMap,其中包含它获得的每个键的innerMap。起初,每个innerMap 都是相同的(这里,它们包含{1=1}。我想为某个键更改某个特定innermap 的值。这是我的代码:public class HelloWorld{  public static void main(String args[]){        HashMap<String, HashMap<String, Integer>> outerMap = new HashMap<String, HashMap<String, Integer>>();        HashMap<String, Integer> innerMap = new HashMap<String, Integer>();        outerMap.put("1001",innerMap);        outerMap.put("1002",innerMap);        outerMap.put("1003",innerMap);            innerMap.put("1", 1); //My attempt to change only one innermap;            Map<String, Integer> map_to_change = outerMap.get("1001");            map_to_change.put("1", 0);//And then I print them to see if it's working;            for(Map.Entry map  :  outerMap.entrySet() )        {            System.out.println(map.getKey()+" "+map.getValue());        }    }}但是,这里的输出是1003 {1=0}1002 {1=0}1001 {1=0}这表明我的代码更改了所有内部映射,而不仅仅是与键“1001”链接的内部映射。我能做什么?
查看完整描述

1 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

您都指向相同innerMap的对象outerMap,


outerMap.put("1001",new HashMap<String, Integer>());//create separate maps

outerMap.put("1002",new HashMap<String, Integer>());

outerMap.put("1003",new HashMap<String, Integer>());


HashMap<String, Integer> innerMap =outerMap.get("1001");//get the map you want to put value

innerMap.put("1", 1);//assign the value

更新:

如果要保留Map已创建的副本,Map可以使用putAll方法从中复制并创建新副本,


outerMap.put("1001",copyMap(innerMap));

outerMap.put("1002",copyMap(innerMap));

outerMap.put("1003",copyMap(innerMap));

copyMap 方法看起来像,


private static HashMap<String, Integer> copyMap(HashMap<String, Integer> innerMap){

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

    copiedInnerMap.putAll(innerMap);

    return copiedInnerMap;

}


查看完整回答
反对 回复 2021-08-19
  • 1 回答
  • 0 关注
  • 175 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信