2011-05-10 64 views
2
TreeMap<Integer, String> map = new TreeMap<Integer, String>(); 

    map.put(1, "example"); 
    map.put(1, "example2"); 
    map.put(1, "example3"); 

    Iterator<Integer> itr = map.keySet().iterator(); 

    while (itr.hasNext()) { 
     Object obj = itr.next(); 
     System.out.println(map.get(obj)); 

    } 

它始終返回"example3"。我可以知道爲什麼嗎?爲什麼我不能檢索所有的值? 如何訂購Treemap中的鑰匙?鍵應該是從0,1,2 ...TreeMap <Integer,String>在java中返回單個值

回答

3

您爲同一個鍵設置不同的值。取而代之的

map.put(1, "example"); 
map.put(1, "example2"); 
map.put(1, "example3"); 

使用

map.put(1, "example"); 
map.put(2, "example2"); 
map.put(3, "example3"); 
6

因爲通過映射到同一個鍵的所有值(1)您有效地覆蓋您的初始EntryThe Map javadoc

如果映射以前包含了一個該鍵的映射關係,則舊值由指定的值替換

1

地圖不能有重複鍵,所以你更換「的例子「和」example2「鍵。你可以實現一個Multimap來解決這個問題。

1

就是這樣Map指定:當你使用相同的密鑰現有的,以前的值一個被覆蓋添加對象。

從一Map's Javadoc

一個映射不能包含重複的鍵;每個鍵可以映射到最多一個值。

2

這是因爲您正在覆蓋同一個鍵的值。如果你使用了三個不同的鍵,你會得到所有的三個值。例如,嘗試更改爲:

map.out(1, "example"); 
map.out(2, "example2"); 
map.out(3, "example3"); 
2
TreeMap<Integer, String> map = new TreeMap<Integer, String>(); 

    map.put(1, "example"); /*FIXED*/ 
    map.put(2, "example2"); /*FIXED*/ 
    map.put(3, "example3"); /*FIXED*/ 

    Iterator<Integer> itr = map.keySet().iterator(); 

    while (itr.hasNext()) { 
     Object obj = itr.next(); 
     System.out.println(map.get(obj)); 

    }