2010-12-16 75 views
4

相關幫助映射這個數據我有問題映射這個數據需要的Java

  1   35 
      1   30 
      1   20 
      2   10 
      3   40 
      3   25 
      3   15 

我使用HashMap的嘗試,但它只會映射到這個數據的最後出現。

回答

8

您所描述的MapHashMap的行爲是其他評論者注意到的預期行爲。你想要的是一個多圖。你可以自己推出(不要這樣做 - 其他評論者建議將地圖映射到列表中,但這很快就會變得很麻煩。如果你真的想推出自己的產品,可以使用列表/設置值推出自己的通用多圖,並隱藏複雜性。 )或使用Guavamultimap。例如:

import com.google.common.collect.HashMultimap; 
import com.google.common.collect.SetMultimap; 

    public static void main(String[] args) 
    { 
    final SetMultimap<Integer, Integer> foo = HashMultimap.create(); 
    foo.put(1,35); 
    foo.put( 1,30); 
    foo.put( 1,20); 
    foo.put( 2,10); 
    foo.put( 3,40); 
    foo.put( 3,25); 
    foo.put( 3,15); 
    System.out.println(foo); 
    } 

輸出:

{1 = [35,20,30],2 = [10],3 = [25,40, 15]}

如果你想訪問這些值,有幾種方法取決於你想要做什麼。只需撥打get(Integer key)即可返回值的集合。

此外,檢查出this answer,其中引用了許多相關的善良在番石榴。

6

The documentation states

公共接口地圖
將鍵映射到值的對象。 A 地圖不能包含重複的鍵;每個鍵可以映射到最多一個值。

相反,您可以將數字列表與每個鍵相關聯。

4

您可以使用Map<Long, List<Long>>(或您擁有的任何類型)來解決此問題。

0

或者創建一個對< F,S>類,並把它們放在一個列表

列表<對<整數,整數>>