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