2015-11-02 77 views
-2

我想使用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; 
    } 
} 

例子:

喬恩擁有:

[魔戒]

[哈利波特]

戴夫擁有:

[火星]

[冰凍]

但是目前我們只能說明:

喬恩擁有:

[哈利波特]

戴夫擁有:

[冰凍]

+9

您每次創建一個帶有列表的新列表 listTitle = new ArrayList ();'。您需要改爲現有的。 – Tunaki

+0

使用owner.get(key); – 2015-11-02 15:09:17

回答

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); 
    } 
+0

謝謝! Excatly我正在尋找! –

+0

歡迎,那麼你可以接受我的回答:-) – vels4j

0

或者更緊湊:

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