HashMap仅存储每个键的最后一个值

时间:2015-11-02 14:59:47

标签: java hashmap

我想使用HashMap为每个密钥存储多个值。

我想我已经弄清楚我的代码有什么问题,但我不知道如何修复它。据我所知,每次方法发送新参数时,HashMap都会覆盖自身而不是添加新值。

如何阻止它覆盖自己,而是添加新标题。

HashMap<String, List<String>> owner = new HashMap<String, List<String>>();

    public void Owner (String name, String title) throws Exception{
        List<String> listTitle = new ArrayList<String>();
        if(!listTitle.contains(title)){
            listeTitle.add(title);
        }
        else if(listeTitle.contains(title)){
            System.out.println("This person allready owns this title.");
        }
        eier.put(name, listTitle);
    }

用于打印HashMap的方法:

public void PrintOwner(){
    for (HashMap.Entry<String, List<String>> entry : owner.entrySet()) {
        String key = entry.getKey();
        List<String> values = entry.getValue();
        System.out.println(key + " owns:" + values;
    }  
}

运行后我希望控制台看起来如何的示例:

  

Jon拥有:

     

[指环王]

     

[哈利波特]

     

戴夫拥有:

     

[火星人]

     

[冻]

但目前只显示:

  

Jon拥有:

     

[哈利波特]

     

戴夫拥有:

     

[冻]

2 个答案:

答案 0 :(得分:4)

实施应该像

 List titles = owner.get(name);
    if (titles == null) {
        titles = new ArrayList();
        titles.add(title);
        owner.put(name,titles);
    } else if (titles.contains(title)) {
        System.out.println("This person allready owns this title.");
    } else {
        titles.add(title);
    }

答案 1 :(得分:0)

或更紧凑:

public void Owner (String namn, String title) throws Exception{
     List<String> listTitle = owner.containsKey(nman) 
              ? owner.get(namn) : new ArrayList<String>();