2014-09-18 67 views
2

我想要實現Hash表在Java多個值即HashMap的多值

// if sample is a hashmap 
sample.put(1,1); 
sample.put(1,2); 

sample.get(1);將返回2倍的值。

我該如何做到這一點?

+0

你需要讓「價值」列表。 – 2014-09-18 16:10:24

+0

將該值作爲Collection的一個子類,如ArrayList。你上面的代碼不會累積1和2,而是用2替換1。 – rajah9 2014-09-18 16:11:40

回答

6

您可以改爲使用Multimap。它爲列表中的鍵保留多個值。有在commons-collectionsGuava執行。

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返回地圖。

+0

@Unihedron:是的,這是行得通的。補充說,作爲替代,謝謝 – 2014-09-18 17:53:38

+0

感謝提到'Multimap'。 TIL :) – Unihedron 2014-09-18 17:54:57

1

嘗試HashMap<Key, List<Value>>如果需要,您需要管理列表,創建它是否已經存在,然後添加到列表中。

番石榴還提供了Multimap實現

1

做這種方式

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之