扩展HashMap的java类<;字符串,Map<;字符串,列表<;字符串>&燃气轮机;覆盖方法不起作用
嗨,我在班上遇到了一个问题:扩展HashMap的java类<;字符串,Map<;字符串,列表<;字符串>&燃气轮机;覆盖方法不起作用,java,dictionary,put,Java,Dictionary,Put,嗨,我在班上遇到了一个问题: public class JarClassMethod extends HashMap<String,HashMap<String, List<String>>> { public JarClassMethod() { super(); } public List<String> get(String jar,String classe) { return ge
public class JarClassMethod extends HashMap<String,HashMap<String, List<String>>> {
public JarClassMethod() {
super();
}
public List<String> get(String jar,String classe) {
return get(jar).get(classe);
}
public void put(String jar, String classe, List<String> metodi) {
Map<String,List<String>> map2 = new HashMap<>();
map2.put(classe, metodi);
this.put(jar, (HashMap<String, List<String>>) map2);
}
}
Thks
关于A
Map
如果为现有键输入新值,则会覆盖以前的值。请检查以下状态:
如果映射以前包含键的映射,则旧值
由指定的值替换
如果总是使用相同的键调用put
,请检查循环。如果是,最后,映射
将只有一个值,这是最后输入的值
确保创建由map2
引用的新对象,如下所示:
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Testing {
public static void main(String[] args) {
HashMap<String,HashMap<String, List<String>>> map=new HashMap<String,HashMap<String, List<String>>>();
Map<String,List<String>> map2;
map2= new HashMap<>();
map2.put("classe1",List.of("s","adas","da","sd"));
map2.put("classe2",List.of("asda","fdd","ass"));
map.put("jar1", (HashMap<String, List<String>>) map2);
System.out.println(map);
map2= new HashMap<>();
map2.put("classe3",List.of("s","adas","da","sd"));
map2.put("classe4",List.of("asda","fdd","ass"));
map.put("jar2", (HashMap<String, List<String>>) map2);
System.out.println(map);
}
}
您的
put
方法正在替换给定jar
键的内部映射,因此只保留给定jar
键的最后一个classe
。只有当jar
键还没有新的内部HashMap
时,才应该放置新的内部HashMap
实施方法应为:
public void put(String jar, String classe, List<String> metodi) {
computeIfAbsent(jar, k -> new HashMap<>()).put(classe, metodi);
}
public List<String> get(String jar, String classe) {
HashMap<String, List<String>> classeMap = get(jar);
return (classeMap == null ? null : classeMap.get(classe));
}
试验
输出
jar2={classe4=[asda,fdd,ass],classe3=[s,adas,da,sd]}
jar1={classe2=[asda,fdd,ass],classe1=[s,adas,da,sd]}
我想要一个方法,我的地图类似于:{“jar”:{classe1:[s,adas,da,sd],classe2:[asda,fdd,ass],}}我已经添加了一个注释(确保创建一个由map2引用的新对象)
)。如有任何疑问,请随时发表评论。
public void put(String jar, String classe, List<String> metodi) {
computeIfAbsent(jar, k -> new HashMap<>()).put(classe, metodi);
}
public List<String> get(String jar, String classe) {
HashMap<String, List<String>> classeMap = get(jar);
return (classeMap == null ? null : classeMap.get(classe));
}
JarClassMethod jcm = new JarClassMethod();
jcm.put("jar1", "classe1", Arrays.asList("s","adas","da","sd"));
jcm.put("jar1", "classe2", Arrays.asList("asda","fdd","ass"));
jcm.put("jar2", "classe3", Arrays.asList("s","adas","da","sd"));
jcm.put("jar2", "classe4", Arrays.asList("asda","fdd","ass"));
jcm.forEach((k,v) -> System.out.println(k + "=" + v));