如何使用散列映射和数组列表与键映射到多个值?

时间:2018-02-14 21:45:41

标签: arraylist hashmap

我正在尝试创建一个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"));
}
}

目前,我的输出为空。

2 个答案:

答案 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);

    }
}