gpt4 book ai didi

java - 嵌套 HashMap 问题 (Java)

转载 作者:行者123 更新时间:2023-12-01 22:22:20 26 4
gpt4 key购买 nike

我遇到了这个问题,我试图通过将其中一个嵌套在另一个中来创建一个 2D HashMap,但我遇到了一个奇怪的问题,其中一些数据被更多数据覆盖,我不确定如何解决它。非常感谢您提前付出的所有时间和努力。

import java.util.HashMap;


public static void main(String args[]) {

HashMap<Integer, HashMap<Integer, Integer>> outerMap = new HashMap<Integer, HashMap<Integer, Integer>>();
HashMap<Integer, Integer> innnerMap = new HashMap<Integer, Integer>();
int number;

innnerMap.put(5, 100);
outerMap.put(6, innnerMap);

innnerMap.put(5, 77);
outerMap.put(10, innnerMap);

innnerMap.put(33, 88);
outerMap.put(6, innnerMap);

System.out.println(outerMap.get(6).get(5));

}

这段代码给出的输出是 77,尽管很明显 100 是预期的输出。我仍然说黑魔法是罪魁祸首:/

编辑:我的帖子与我被标记为重复的帖子完全不同,我的帖子是关于嵌套 HashMap 的,还有关于列表和静态字段的。

此帖子已被回复,但不是重复的!

最佳答案

如果将同一个内部 HashMap 多次添加到外部 HashMap,您将看到“数据被更多数据覆盖”。

在将它添加到外部 HashMap 之前,您必须创建一个新的内部 HashMap :

当您想要将数据添加到内部 map 时,您必须检查是否尚未将其添加到外部 map ,如果已经添加,则必须使用现有的内部 map 。

Java 8 有一种简短而有效的方法来实现您所需要的:

HashMap<Integer, HashMap<Integer, Integer>> outerMap = new HashMap<>();
HashMap<Integer, Integer> innerMap = null;

innerMap = outerMap.computeIfAbsent(6, HashMap::new); // this will put a new inner HashMap
// in the outer HashMap if it
// doesn't contain a value for the
// given key 6, or return the
// existing inner map otherwise
innerMap.put(5, 100);

innerMap = outerMap.computeIfAbsent(10, HashMap::new);
innerMap.put(5, 77);

innerMap = outerMap.computeIfAbsent(6, HashMap::new);
innerMap.put(33, 88);

System.out.println(outerMap.get(6).get(5));

此代码由 user1121883 添加。如果你不能使用 Java 8,你可以使用它:

public static HashMap<Integer,Integer> get(Integer key, HashMap<Integer, HashMap<Integer, Integer>> map){
HashMap<Integer,Integer> innerMap = map.get(key);
if(innerMap == null){
innerMap = new HashMap<>();
map.put(key, innerMap);
}
return innerMap;
}

HashMap<Integer, HashMap<Integer, Integer>> outerMap = new HashMap<Integer, HashMap<Integer, Integer>>();

HashMap<Integer, Integer> innnerMap = get(6, outerMap);
innnerMap.put(5, 100);

innnerMap = get(10, outerMap);
innnerMap.put(5, 77);

innnerMap = get(6, outerMap);
innnerMap.put(33, 88);

System.out.println(outerMap.get(6).get(5));

关于java - 嵌套 HashMap 问题 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39270476/

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