2015-08-31 37 views
3

我來到一個交叉的情況下,我需要這樣的:任何數據結構 - 不準確地映射

197 => 6 (1 year) 
197 => 12 (2 years) 

要添加多個產品及其價格的基礎上,年訂閱,數值會有所不同。

我不知道如果我們在Java的支持重複鍵(應該表現得像地圖,必須支持重複鍵)的任何數據結構。

我可以通過創建一個類做,但只是想知道是否有任何支持該thing..It更像是一個地圖,沒有,因爲它需要支持多鍵地圖。

+2

它如何像地圖一樣行爲,同時又有重複的鍵?在這種情況下調用'get(197)'時,你期望得到什麼?數組?一個列表?而當你試圖刪除一個條目時:'remove(197)'...應刪除哪個條目?他們全部?我認爲你並沒有完全想到這一點。 –

+0

http://commons.apache.org/proper/commons-collections/javadocs/api-3.2.1/org/apache/commons/collections/MultiMap.html – BigMike

+1

看上去更像比地圖給我一個名單。或者可能是數組的地圖,例如'197:[6,12]'。 –

回答

6

是你可以使用像番石榴現有庫做到這一點。這是一個鏈接到番石榴庫link的接口MultiMap。這裏就介紹如何使用它的一個例子(從here拍攝):

Multimap<String, String> myMultimap = ArrayListMultimap.create(); 

    // Adding some key/value 
    myMultimap.put("Fruits", "Banana"); 
    myMultimap.put("Fruits", "Apple"); 
    myMultimap.put("Fruits", "Pear"); 
    myMultimap.put("Vegetables", "Carrot"); 

    // Getting the size 
    int size = myMultimap.size(); 
    System.out.println(size); // 4 

    // Getting values 
    Collection<string> fruits = myMultimap.get("Fruits"); 
    System.out.println(fruits); // [Bannana, Apple, Pear] 

    Collection<string> vegetables = myMultimap.get("Vegetables"); 
    System.out.println(vegetables); // [Carrot] 

第二個可能性是創建一個Map<String, List<Object>>和手動處理參考,你需要關聯到單個鍵對象的列表。

+0

這就是我所需要的。 –

+0

如果您發現這是正確的解決方案,您可以用綠色標誌接受它。謝謝 –

+0

是的..會做.. –

3

有多重映射,但這看起來並不像一個很好用的情況下,你應該使用Map<Product, Map<Years, Price>>

197 => { 
    1 year => 6 
    2 years => 12 
} 
0

如果你不想使用像番石榴外部庫,你可以創建自己的。

HashMap<Integer, ArrayList<String>> hm = new HashMap(); 
for(int i = 0; i < 10; ++i){ 
ArrayList<String> li = new ArrayList(); 
for(int j = 0; j < 10; ++j) 
    li.add(j * i); 
hm.put(i, li); 
} 
System.out.println(hm.get(4));//[0,4,8,12....]