如何獲取地圖的最後一個和第一個鍵/值? 例如:獲取地圖中的最後一個值
Map<String,Integer> ret = new HashMap<String,Integer>();
這是RET值:
{33=1, 12=2, 21=2, 93=2, 48=9, 68=10}
如何獲取地圖的最後一個和第一個鍵/值? 例如:獲取地圖中的最後一個值
Map<String,Integer> ret = new HashMap<String,Integer>();
這是RET值:
{33=1, 12=2, 21=2, 93=2, 48=9, 68=10}
你不能用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;
}
因爲沒有定義的順序,你會基本上得到一個隨機元素,如果你運氣不好。
你還能走的路的HashMap - > getEntrySet - >指定者 - >獲取(大小-1)
這是不可能的(或更像是沒有意義)區分「第一」和「最後」,當涉及到HashMap
。如果您想保留廣告訂單,則可能需要使用LinkedHashMap<K,V>
。但是,再次,你應該詳細說明你的問題,讓我們知道要求這個的確切用例。
A HashMap
是一個無序的地圖,所以它沒有任何'first'或'last'的概念。
如果您想要一張保留插入順序的地圖,您可以使用LinkedHashMap
,然後重複其entrySet()
方法來選擇第一個和最後一個值。
您也可以使用SortedMap
接口(TreeMap
impl。),它通過按鍵的自然排序(或提供的Comparator
)對插入的條目進行排序。
*通過按鍵大小*按鍵大小對插入的條目進行排序我會換個說法。 +1其餘 – 2012-01-18 07:35:49
@SeanPatrickFloyd - 你會建議什麼措辭?來自TreeMap javadocs的 – tzaman 2012-01-18 07:38:09
:「地圖根據其按鍵的自然順序或地圖創建時提供的比較器進行排序」。沒有關於那裏的鑰匙大小 – 2012-01-18 07:39:51
除非你使用一個http://docs.oracle.com/javase/6/docs/api/java/util/SortedMap.html,在這種情況下,你可以得到的第一個和最後一個鍵..
謹慎分辨爲什麼這是downvoted? – quaylar 2012-01-18 08:03:57
從技術上講,你可以從地圖上通過的第一個對象:
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替代它,你可以使用上面的代碼得到第一個和最後一個插入的對。
'HashMap'沒有排序,所以'first'和'last'並不代表什麼意思。 – tzaman 2012-01-18 07:30:14
可能重複[訪問地圖中的最後一個條目](http://stackoverflow.com/questions/3527216/accessing-the-last-entry-in-a-map) – 2012-01-18 07:34:00
@TJCrowder謝謝:)我只是寫一個更詳細的答案。 – tzaman 2012-01-18 07:35:08