我正在創建一個需要存儲鍵值對的程序。程序需要以鍵的形式接受請求,並返回相應的值。帶有重複鍵的java地圖
問題是,有時每個鍵有多個值,而映射類不允許重複鍵。
這些值是數字,所以我不能像字符串那樣有意義地連接值。
是否有任何優雅的方式來解釋每個鍵可以有多個數值的事實?我希望每個號碼都能被退回,而不是隨機一個。
我正在創建一個需要存儲鍵值對的程序。程序需要以鍵的形式接受請求,並返回相應的值。帶有重複鍵的java地圖
問題是,有時每個鍵有多個值,而映射類不允許重複鍵。
這些值是數字,所以我不能像字符串那樣有意義地連接值。
是否有任何優雅的方式來解釋每個鍵可以有多個數值的事實?我希望每個號碼都能被退回,而不是隨機一個。
$ 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]
您正在尋找的結構稱爲「多圖」。您可以使用ArrayLists作爲值的普通映射,也可以使用multimap實現。 Google的「番石榴」工具包中有一個很好的例子。見here.
如果您的值列表,則這將是能夠存儲多個值的關鍵
Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();
不要忘記你創建後,把電流轉換成地圖。 – MeBigFatGuy 2011-03-26 04:24:55
得到了你:) – 2011-03-26 04:31:41
啊,是啊,啊。我應該提到代碼沒有經過測試嗎? :) – 2011-03-26 05:06:57