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 ),当我在我的代码中输入密钥和值或其他错误时,我不确定是否有问题。请帮忙!
答案 0 :(得分:0)
两个主要问题:
在构造函数中,您将事物存储在您未保留的本地地图中。 您的地图MyHashMap
实例中没有任何内容。
从构造函数中删除map
变量,然后改用this
,例如:
this.put(...);
其次,您没有使用在构造函数中传递给构造函数的keys
和values
。您只是在构造函数本身中使用了一系列硬编码语句。所以这两者在逻辑上都没有意义,也不会编译,因为不能保证(在那个阶段)this.put
可以应用于String, Integer
(即使这是你以后做的) 。但是,如果您使用keys
和values
中的值,因为它们已被键入K
和V
,它将起作用。
,修复两者,删除构造函数中的一系列硬编码行(以及map
)并使用keys
和values
上的循环:
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