Hashmap,值为空 import java.util.*; 公共类MyHashMap扩展了HashMap{ 公共MyHashMap(K[]键,V[]值){ 超级(); //将对存储到HashMap对象 HashMap=newHashMap(); map.put(“氢”,1); 地图。放置(“锂”,3); 地图。放置(“钠”,11); 图.put(“钾”,19); put地图(“铷”,37); } 公共字符串toString(){ 返回“完成”; } 公共静态void main(字符串[]args){ //两个阵列 字符串[]元素={“氢”、“锂”、“钠”、“钾”、“铷”}; 整数[]原子数={1,3,11,19,37}; MyHashMap=新的MyHashMap(元素、原子数); 对于(int i=0;i

Hashmap,值为空 import java.util.*; 公共类MyHashMap扩展了HashMap{ 公共MyHashMap(K[]键,V[]值){ 超级(); //将对存储到HashMap对象 HashMap=newHashMap(); map.put(“氢”,1); 地图。放置(“锂”,3); 地图。放置(“钠”,11); 图.put(“钾”,19); put地图(“铷”,37); } 公共字符串toString(){ 返回“完成”; } 公共静态void main(字符串[]args){ //两个阵列 字符串[]元素={“氢”、“锂”、“钠”、“钾”、“铷”}; 整数[]原子数={1,3,11,19,37}; MyHashMap=新的MyHashMap(元素、原子数); 对于(int i=0;i,java,hashmap,Java,Hashmap,两个主要问题: 在构造器中,您正在本地映射中存储未保留的内容。您的映射,MyHashMap实例中没有任何内容 从构造函数中删除map变量,并改用this,例如: import java.util.*; public class MyHashMap<K,V> extends HashMap<K,V> { public MyHashMap(K[] keys, V[] values) { super(); // Store the <

两个主要问题:

  • 在构造器中,您正在本地映射中存储未保留的内容。您的映射,
    MyHashMap
    实例中没有任何内容

    从构造函数中删除
    map
    变量,并改用
    this
    ,例如:

    import java.util.*;
    public class MyHashMap<K,V> extends HashMap<K,V> {
        public MyHashMap(K[] keys, V[] values) {
            super();
            // Store the <key,value> pairs to the HashMap object
    
            HashMap<String,Integer> map = new HashMap<String,Integer>();
            map.put("Hydrogen",1);
            map.put("Lithium",3);
            map.put("Sodium",11);
            map.put("Potassium",19);
            map.put("Rubidium",37);
    
        }
    
        public String toString() {
            return "Done";
        }
    
        public static void main(String[] args) {
            //Two Arrays
            String[] elements ={"Hydrogen","Lithium","Sodium","Potassium","Rubidium"};
            Integer[] atomicNumbers = {1,3,11,19,37};
    
            MyHashMap<String,Integer> map = new MyHashMap<String,Integer>   (elements,atomicNumbers);    
            for (int i=0; i<elements.length; i++) {
                System.out.println("The atomic number of " + elements[i] + " is "+          map.get(elements[i]));
            }
    
            System.out.println(map.toString());
        }
    }
    
  • 其次,您没有使用传递到构造函数中的
    。您只是在构造函数本身中使用了一系列硬编码语句。因此这在逻辑上没有意义,也不会编译,因为(在该阶段)没有保证该
    this.put
    可以应用于
    字符串、整数
    (即使这是您稍后要做的)。如果您使用
    ,但是,当键入
    K
    V
    时,它会起作用

  • 例如,修复这两个键,移除构造函数中的一系列硬编码行(连同
    映射
    ),并在
    值上使用循环:

     this.put(...);
    
    if(keys.length!=values.length){
    //抛出异常或类似异常
    }
    对于(int i=0;i
    您将条目存储在
    map
    对象中,此对象的作用域仅限于
    MyHashMap
    构造函数

    试试这个:

    if (keys.length != values.length) {
        // Throw an exception or similar
    }
    for (int i = 0; i < keys.length; ++i) {
        this.put(keys[i], values[i]);
    }
    
    publicMyHashMap(K[]键,V[]值){
    if(keys.length==values.length){
    for(int i=0;i
    请记住,
    MyHashMap
    是一个
    Map
    ,但是您仍然需要填充值。这可以通过使用您在
    main
    中声明的数组来实现

    如果数组的大小已关闭(或数组为
    null
    ),则不希望创建此对象;我将后者留给用户作为练习

    public MyHashMap(K[] keys, V[] values) {
        if (keys.length == values.length) {
            for (int i = 0; i < keys.length; i++) {
                this.put(keys[i], values[i]);
            }
        }
    }
    
    publicMyHashMap(K[]键,V[]值){
    超级();
    if(keys.length!=values.length){
    抛出新的IllegalArgumentException(“数组长度不相等!”);
    }
    //将对存储到HashMap对象
    for(int i=0;i
    为什么要扩展HashMap?为什么要以这样一种无用的方式重写
    toString
    ?删除扩展HashMap,只在主方法中使用一个。例如:Map Map=new HashMap();Map.put(“Hydrogen”,1);Map.put(…如何通过调用toString方法(System.out.println(Map.toString())打印出键和值),方法中应该返回哪些字符串?谢谢!还有一个问题,如何通过调用toString方法(System.out.println(map.toString())打印出键和值),方法中应该返回哪些字符串?谢谢!还有一个问题,如何通过调用toString方法(System.out.println)打印出键和值(map.toString()),方法中应该返回什么到字符串?谢谢!还有一个问题,如何通过调用toString方法(System.out.println(map.toString())打印出键和值,方法中应该返回什么到字符串?谢谢!@CJDEG,如果不重写
    toString(…)
    在您的类中,它将使用超类“
    toString(…)
    方法,因此只需从类中删除
    toString(…)
    方法,就可以正确打印它们。
    public MyHashMap(K[] keys, V[] values) {
        super();
    
        if (keys.length != values.length) {
            throw new IllegalArgumentException("Array lengths are not equivalent!");
        }
        // Store the <key,value> pairs to the HashMap object
        for (int i = 0; i < keys.length; i++) {
            put(keys[i], values[i]);
        }
    }