一张地图在 Java 中包含另一张地图
A map contains another Map in Java
我想创建一个包含另一个的 Map map.If 内部 Map 中没有特殊键,我想创建值为 1 的键,否则增加它的值。
我写了 这段代码 :
Map <String, Map <String,Double>> ingMap= new HashMap<>();
Map <String,Double> k= new HashMap<>();
k.put("Class1", 1.0);
ingMap.put("A", k);
k.put("Class2", 1.0);
ingMap.put("A", k);
k.put("Class1", 1.0);
ingMap.put("B", k);
k.put("Class2", 1.0);
ingMap.put("B", k);
k = ingMap.get("A");
if (k.containsKey("Class3")) {
k.put("Class3", k.get(k)+1);
ingMap.put("A", k );
}
else{
k.put("Class3", 1.0);
ingMap.put("A",k );
}
System.out.println("\n" + ingMap);
结果是:
{A={Class1=1.0, Class2=1.0, Class3=1.0}, B={Class1=1.0, Class2=1.0, **Class3=1.0}**}
但我真的很想:
{A={Class1=1.0, Class2=1.0, Class3=1.0}, B={Class1=1.0, Class2=1.0}}
您将相同的内部映射 k
放入外部映射的所有值中。
您需要为每个外部地图键创建一个新的内部地图实例:
Map <String,Double> k= new HashMap<>();
k.put("Class1", 1.0);
k.put("Class2", 1.0);
ingMap.put("A", k);
k= new HashMap<>();
k.put("Class1", 1.0);
k.put("Class2", 1.0);
ingMap.put("B", k);
而且没有必要将相同的值和相同的键放在一起两次,因为它什么都不做。
更新内部地图的代码应该是这样的:
k = ingMap.get("A");
if (k != null) {
if (k.containsKey("Class3")) {
k.put("Class3", k.get("Class3")+1);
}
else {
k.put("Class3", 1.0);
}
}
我想创建一个包含另一个的 Map map.If 内部 Map 中没有特殊键,我想创建值为 1 的键,否则增加它的值。
我写了 这段代码 :
Map <String, Map <String,Double>> ingMap= new HashMap<>();
Map <String,Double> k= new HashMap<>();
k.put("Class1", 1.0);
ingMap.put("A", k);
k.put("Class2", 1.0);
ingMap.put("A", k);
k.put("Class1", 1.0);
ingMap.put("B", k);
k.put("Class2", 1.0);
ingMap.put("B", k);
k = ingMap.get("A");
if (k.containsKey("Class3")) {
k.put("Class3", k.get(k)+1);
ingMap.put("A", k );
}
else{
k.put("Class3", 1.0);
ingMap.put("A",k );
}
System.out.println("\n" + ingMap);
结果是:
{A={Class1=1.0, Class2=1.0, Class3=1.0}, B={Class1=1.0, Class2=1.0, **Class3=1.0}**}
但我真的很想:
{A={Class1=1.0, Class2=1.0, Class3=1.0}, B={Class1=1.0, Class2=1.0}}
您将相同的内部映射 k
放入外部映射的所有值中。
您需要为每个外部地图键创建一个新的内部地图实例:
Map <String,Double> k= new HashMap<>();
k.put("Class1", 1.0);
k.put("Class2", 1.0);
ingMap.put("A", k);
k= new HashMap<>();
k.put("Class1", 1.0);
k.put("Class2", 1.0);
ingMap.put("B", k);
而且没有必要将相同的值和相同的键放在一起两次,因为它什么都不做。
更新内部地图的代码应该是这样的:
k = ingMap.get("A");
if (k != null) {
if (k.containsKey("Class3")) {
k.put("Class3", k.get("Class3")+1);
}
else {
k.put("Class3", 1.0);
}
}