2012-01-18 41 views
1

如何獲取地圖的最後一個和第一個鍵/值? 例如:獲取地圖中的最後一個值

Map<String,Integer> ret = new HashMap<String,Integer>(); 

這是RET值:

{33=1, 12=2, 21=2, 93=2, 48=9, 68=10} 
+4

'HashMap'沒有排序,所以'first'和'last'並不代表什麼意思。 – tzaman 2012-01-18 07:30:14

+3

可能重複[訪問地圖中的最後一個條目](http://stackoverflow.com/questions/3527216/accessing-the-last-entry-in-a-map) – 2012-01-18 07:34:00

+0

@TJCrowder謝謝:)我只是寫一個更詳細的答案。 – tzaman 2012-01-18 07:35:08

回答

4

你不能用HashMap這樣做,因爲鍵是沒有順序的。考慮使用LinkedHashMap

您可以使用此方法獲取最後一個元素:

public <K,V> Map.Entry<K,V> getLast(LinkedHashMap<K,V> map) { 
    Iterator<Map.Entry<K,V>> iterator = map.entrySet().iterator(); 
    Map.Entry<K, V> result = null; 
    while (iterator.hasNext()) { 
     result = iterator.next(); 
    } 
    return result; 
} 
1

因爲沒有定義的順序,你會基本上得到一個隨機元素,如果你運氣不好。

你還能走的路的HashMap - > getEntrySet - >指定者 - >獲取(大小-1)

2

這是不可能的(或更像是沒有意義)區分「第一」和「最後」,當涉及到HashMap。如果您想保留廣告訂單,則可能需要使用LinkedHashMap<K,V>。但是,再次,你應該詳細說明你的問題,讓我們知道要求這個的確切用例。

4

A HashMap是一個無序的地圖,所以它沒有任何'first'或'last'的概念。
如果您想要一張保留插入順序的地圖,您可以使用LinkedHashMap,然後重複其entrySet()方法來選擇第一個和最後一個值。
您也可以使用SortedMap接口(TreeMap impl。),它通過按鍵的自然排序(或提供的Comparator)對插入的條目進行排序。

+0

*通過按鍵大小*按鍵大小對插入的條目進行排序我會換個說法。 +1其餘 – 2012-01-18 07:35:49

+0

@SeanPatrickFloyd - 你會建議什麼措辭?來自TreeMap javadocs的 – tzaman 2012-01-18 07:38:09

+0

:「地圖根據其按鍵的自然順序或地圖創建時提供的比較器進行排序」。沒有關於那裏的鑰匙大小 – 2012-01-18 07:39:51

1

從技術上講,你可以從地圖上通過的第一個對象:

Map.Entry<Integer,Integer> entry = map.entrySet().iterator().next(); 

而最後通過:

Iterator<Map.Entry<Integer,Integer>> iter = map.entrySet().iterator(); 
Map.Entry<Integer,Integer> entry = null; 
while(iter.hasNext()) { 
    entry = iter.next(); 
} 
// now you have the "last" item in the map stored in 'entry' 

但是,正如其他答案中所述,這並不意味着任何與HashMap。然而,用LinkedHashMap替代它,你可以使用上面的代碼得到第一個和最後一個插入的對。

相關問題