猿问

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

我有一个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”链接的内部映射。我能做什么?


有只小跳蛙
浏览 176回答 1
1回答

拉丁的传说

您都指向相同innerMap的对象outerMap,outerMap.put("1001",new HashMap<String, Integer>());//create separate mapsouterMap.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 valueinnerMap.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){&nbsp; &nbsp; HashMap<String, Integer> copiedInnerMap = new HashMap<String, Integer>();&nbsp; &nbsp; copiedInnerMap.putAll(innerMap);&nbsp; &nbsp; return copiedInnerMap;}
随时随地看视频慕课网APP

相关分类

Java
我要回答