我想要實現Hash表在Java多個值即HashMap的多值
// if sample is a hashmap
sample.put(1,1);
sample.put(1,2);
和sample.get(1);
將返回2倍的值。
我該如何做到這一點?
我想要實現Hash表在Java多個值即HashMap的多值
// if sample is a hashmap
sample.put(1,1);
sample.put(1,2);
和sample.get(1);
將返回2倍的值。
我該如何做到這一點?
您可以改爲使用Multimap。它爲列表中的鍵保留多個值。有在commons-collections和Guava執行。
Multimap<String, String> multimap = ArrayListMultimap.create();
multimap.put("ducks", "Huey");
multimap.put("ducks", "Dewey");
multimap.put("ducks", "Louie");
Collection<String> ducks = multimap.get("ducks");
System.out.println(ducks); // [Huey, Dewey, Louie]
它與使用Hashmap類似,其中的值是列表,但您不必顯式創建列表。
同樣的例子做了做它自己的方式是這樣的:
Map<String, List<String>> map = new HashMap<>();
map.put("ducks", new ArrayList<String>());
map.get("ducks").add("Huey");
map.get("ducks").add("Dewey");
map.get("ducks").add("Louie");
// or as an alternative to the prev 4 lines:
// map.put("ducks", new ArrayList<String>(
// new String[] {"Huey", "Dewey", "Louie"}));
Collection<String> ducks = map.get("ducks");
System.out.println(ducks); // [Huey, Dewey, Louie]
請注意,您可以使用Multimap之作爲一個建設者,並呼籲其asMap返回地圖。
@Unihedron:是的,這是行得通的。補充說,作爲替代,謝謝 – 2014-09-18 17:53:38
感謝提到'Multimap'。 TIL :) – Unihedron 2014-09-18 17:54:57
嘗試HashMap<Key, List<Value>>
如果需要,您需要管理列表,創建它是否已經存在,然後添加到列表中。
番石榴還提供了Multimap實現
做這種方式
Map<String, List> map = new HashMap<String, List>();
List listOne = new ArrayList();
for(int i=0;i<4;i++){
listOne.add(i);
}
List listTwo = new ArrayList();
for(int i=4;i<6;i++){
listTwo.add(i);
}
map.put("listOne",listOne);
map.put("listTwo",listTwo);
或者你甚至可以用番石榴的Multimap之
你需要讓「價值」列表。 – 2014-09-18 16:10:24
將該值作爲Collection的一個子類,如ArrayList。你上面的代碼不會累積1和2,而是用2替換1。 – rajah9 2014-09-18 16:11:40