扩展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));