我正在尝试创建一个HashMap,使得密钥是一年中的几个月,而值是那个月的生日人的名字。我很困难,不知道到底出了什么问题。非常感谢帮助。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class BirthdayStore {
HashMap<String, List<String>> map = new HashMap<String, List<String>>();
public BirthdayStore() {
HashMap<String, List<String>> map = new HashMap<String, List<String>>();
}
public boolean containsKey(String key) {
if(map.containsKey(key)) {
return true;
}
return false;
}
public void put(String key, String word) {
if(!map.containsKey(key)) {
ArrayList<String> arraylist = new ArrayList<String>();
arraylist.add(word);
}
else{
ArrayList<String> arraylist = (ArrayList<String>) map.get(key);
arraylist.add(word);
}
}
public List<String> get(String key) {
return map.get(key);
}
public static void main(String[] args) {
BirthdayStore k = new WordStore();
k.put("september","jack" );
k.put("september","josh" );
k.put("january","james");
System.out.println(k.get("september"));
}
}
目前,我的输出为空。
答案 0 :(得分:1)
除了@ Raizuri的答案之外,请告诉您有一个非常有用的HashMaps方法,getOrDefault
,它检索键的值,并允许您定义一个默认值,如果您的地图中没有密钥。这样您就不必使用条件情况:
public void put(String key, String word) {
List<String> monthBirthdays = map.getOrDefault(key, new ArrayList<>());
monthBirthdays.add(word);
map.put(key, monthBirthdays);
}
答案 1 :(得分:0)
问题在于,当你调用put()
方法时,你创建了arraylist和all,但是你没有把那个arraylist放到你的地图中。
public void put(String key, String word) {
if(!map.containsKey(key)) {
ArrayList<String> arraylist = new ArrayList<String>();
arraylist.add(word); // <-- here you made a new arraylist and added your word to it, but what are you doing with this array list?
// You're not putting it into the HashMap for this key
map.put(key, arraylist); // <-- you have to remember to actually put the arraylist into the map!
}
else{
ArrayList<String> arraylist = (ArrayList<String>) map.get(key);
arraylist.add(word);
}
}