我來到一個交叉的情況下,我需要這樣的:任何數據結構 - 不準確地映射
197 => 6 (1 year)
197 => 12 (2 years)
要添加多個產品及其價格的基礎上,年訂閱,數值會有所不同。
我不知道如果我們在Java的支持重複鍵(應該表現得像地圖,必須支持重複鍵)的任何數據結構。
我可以通過創建一個類做,但只是想知道是否有任何支持該thing..It更像是一個地圖,沒有,因爲它需要支持多鍵地圖。
我來到一個交叉的情況下,我需要這樣的:任何數據結構 - 不準確地映射
197 => 6 (1 year)
197 => 12 (2 years)
要添加多個產品及其價格的基礎上,年訂閱,數值會有所不同。
我不知道如果我們在Java的支持重複鍵(應該表現得像地圖,必須支持重複鍵)的任何數據結構。
我可以通過創建一個類做,但只是想知道是否有任何支持該thing..It更像是一個地圖,沒有,因爲它需要支持多鍵地圖。
是你可以使用像番石榴現有庫做到這一點。這是一個鏈接到番石榴庫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>>
和手動處理參考,你需要關聯到單個鍵對象的列表。
這就是我所需要的。 –
如果您發現這是正確的解決方案,您可以用綠色標誌接受它。謝謝 –
是的..會做.. –
有多重映射,但這看起來並不像一個很好用的情況下,你應該使用Map<Product, Map<Years, Price>>
即
197 => {
1 year => 6
2 years => 12
}
如果你不想使用像番石榴外部庫,你可以創建自己的。
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....]
它如何像地圖一樣行爲,同時又有重複的鍵?在這種情況下調用'get(197)'時,你期望得到什麼?數組?一個列表?而當你試圖刪除一個條目時:'remove(197)'...應刪除哪個條目?他們全部?我認爲你並沒有完全想到這一點。 –
http://commons.apache.org/proper/commons-collections/javadocs/api-3.2.1/org/apache/commons/collections/MultiMap.html – BigMike
看上去更像比地圖給我一個名單。或者可能是數組的地圖,例如'197:[6,12]'。 –