Hashmap,值为null

时间:2015-09-30 17:35:24

标签: java hashmap

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());
    }
}

输出错误(氢原子数 null ),当我在我的代码中输入密钥和值或其他错误时,我不确定是否有问题。请帮忙!

3 个答案:

答案 0 :(得分:0)

两个主要问题:

  1. 在构造函数中,您将事物存储在您未保留的本地地图中。 您的地图MyHashMap实例中没有任何内容。

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

    this.put(...);
    
  2. 其次,您没有使用在构造函数中传递给构造函数的keysvalues。您只是在构造函数本身中使用了一系列硬编码语句。所以这两者在逻辑上都没有意义,也不会编译,因为不能保证(在那个阶段)this.put可以应用于String, Integer(即使这是你以后做的) 。但是,如果您使用keysvalues中的值,因为它们已被键入KV,它将起作用。

  3. ,修复两者,删除构造函数中的一系列硬编码行(以及map)并使用keysvalues上的循环:

    if (keys.length != values.length) {
        // Throw an exception or similar
    }
    for (int i = 0; i < keys.length; ++i) {
        this.put(keys[i], values[i]);
    }
    

答案 1 :(得分:0)

您将条目存储在map对象中,并且此对象的范围仅限于MyHashMap构造函数

试试这个:

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]);
        }
    }
}

答案 2 :(得分:0)

请记住,{name: 'joe'} MyHashMap,但您仍需要填充这些值。这是通过利用您在Map中声明的数组来实现的。

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

null