2012-11-07 38 views
1

我想創建一個地圖IntegerString,並且此地圖訂購我的鑰匙。 所以我用:帶有相同鍵的訂單地圖

TreeMap<Integer, String> thm = new TreeMap<Integer, String>(); 
thm.put(100, "String 1"); 
thm.put(11, "String 2"); 
thm.put(100, "String 3"); 

問題是,當我有兩個相同的鍵,我TreeMap只包含一個!如何創建cobntain兩個相同的kays的TreeMap?如果TreeMap不能解決我的問題,我該怎麼做?

我看了您的回覆是Guava Tree multi-map但Multimap之不下令我的鑰匙

+2

您是否需要兩個單獨的鍵或兩個值作爲同一個鍵? –

+0

我希望能分開! – Mehdi

回答

3

您可能需要使用Guava Tree multi-map用於此目的。如果存在,則映射用新密鑰覆蓋現有密鑰。

實施例:

Multimap<String, String> myMultimap = TreeMultimap.create();  
    // Adding some key/value 
    myMultimap.put("Fruits", "Bannana"); 
    myMultimap.put("Fruits", "Apple"); 
    myMultimap.put("Fruits", "Pear"); 
    myMultimap.put("Vegetables", "Carrot") 

下面是關於如何使用mutli-map的教程。

+0

但它沒有定義:當我做: ListMultimap thm = ArrayListMultimap.create();thm.put(100,「key 1」); thm.put(11,「key 2」); thm.put(3,「key 3」); System.out.println(thm); 我有100 - > 11 - > 3 – Mehdi

+0

看到更新的代碼。使用treemultimap,而不是listmultimap。 – kosa

1

它很容易處理從鍵到多值的映射,它將鍵映射到類似於Map的值,但每個鍵可以與多個值關聯。 Multimap之實施是ArrayListMultimap,HashMultimap,SetMultimap等

Multimap<Integer, String> thm = TreeMultimap.create(); 
thm.put(100, "key 1"); 
thm.put(11, "key 2"); 
thm.put(100, "key 3"); 
+1

但是,如果我製作 ,但結果並不成立。但它沒有定製:當我製作時: thm.put(100,「key 1」); thm.put(11,「key 2」); thm.put(3,「key 3」); – Mehdi

+0

按列表值或按鍵排序? –

+0

看看我的例子!我有兩個鍵值100! – Mehdi

2

如果您需要爲每個鍵多個值,檢查出Guava Multimap

一個與Map類似的集合,但它可以將多個值 與一個單獨的鍵相關聯。如果您使用相同的密鑰( 不同的值)調用put(K,V)兩次,則multimap包含從密鑰到 值的映射。

特別是(爲了滿足您的分類要求),執行TreeMultimap將訂購鍵和值。從DOC:

Multimap之,其鍵和值的 自然順序或提供比較排序的實現。

2

java.util.Map實現類不允許重複鍵。替代外觀Guava Multimap

map.put("key1", "val1"); 
map.put("key1", "val2"); 
2

當你使用TreeMap時,我想你對按鍵的自然排序很感興趣。

如果是的話,最簡單的解決方案似乎使用TreeMap<Integer, List<String>>,創造增加時ArrayList<String>並沒有什麼,當它已經存在

0

,而不必依賴於外部庫項目添加到列表中,你可以創建代替

`Map<Integer,List<String>> thm= new TreeMap<Integer,List<String>>();` 

要添加你所要做的

thm.get 

如果返回null,你把一個新的ArrayList帶有一個元素,如果它返回一個ArrayList,您只需將它追加到它

+0

這不是一個解決方案,我試試:) – Mehdi

+0

我使用移動版本,每次我編輯它抹掉了一半的帖子。 – thedayofcondor