gpt4 book ai didi

java - Java中更新包含hashmap的hashmap的某个值

转载 作者:行者123 更新时间:2023-12-02 10:52:13 26 4
gpt4 key购买 nike

我有一个outerMap,其中包含它获得的每个键的innerMap。首先,每个innerMap都是相同的(这里,它们包含{1=1}。我想更改某个键的某个内部映射的值。

这是我的代码:

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

最佳答案

您在 outerMap 中指向相同的 innerMap 对象,

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 副本,可以使用 putAll 方法从中复制并创建一个新的 Map

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;
}

关于java - Java中更新包含hashmap的hashmap的某个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52081127/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com