2011-03-26 52 views
6

我正在創建一個需要存儲鍵值對的程序。程序需要以鍵的形式接受請求,並返回相應的值。帶有重複鍵的java地圖

問題是,有時每個鍵有多個值,而映射類不允許重複鍵。

這些值是數字,所以我不能像字符串那樣有意義地連接值。

是否有任何優雅的方式來解釋每個鍵可以有多個數值的事實?我希望每個號碼都能被退回,而不是隨機一個。

回答

19
$ cat YourMap.java 
public class YourMap extends HashMap<String, List<Integer>> { 
    public void put(String key, Integer number) { 
     List<Integer> current = get(key); 
     if (current == null) { 
      current = new ArrayList<Integer>(); 
      super.put(key, current); 
     } 
     current.add(number); 
    } 

    public static void main(String args[]) { 
     YourMap m = new YourMap(); 
     m.put("a", 1); 
     m.put("a", 2); 
     m.put("b", 3); 
     for(Map.Entry e : m.entrySet()) { 
      System.out.println(e.getKey() + " -> " + e.getValue()); 
     } 
    } 
} 

$ java map 
b -> [3] 
a -> [1, 2] 
+0

不要忘記你創建後,把電流轉換成地圖。 – MeBigFatGuy 2011-03-26 04:24:55

+0

得到了你:) – 2011-03-26 04:31:41

+0

啊,是啊,啊。我應該提到代碼沒有經過測試嗎? :) – 2011-03-26 05:06:57

11

您正在尋找的結構稱爲「多圖」。您可以使用ArrayLists作爲值的普通映射,也可以使用multimap實現。 Google的「番石榴」工具包中有一個很好的例子。見here.

4

如果您的值列表,則這將是能夠存儲多個值的關鍵

Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();