2013-03-02 61 views
0

我可以分別訪問HashMap的第一個和第二個元素嗎? 我的意思是,如果我有一個HashMap訪問HashMap的元素

Map<Integer, Integer> testMap = new HashMap<Integer, Integer>(); 
int f = testMap.first(); 

我知道有沒有這樣的功能,但我怎麼能訪問元素?

回答

2

HashMap不維護秩序。

這個類不能保證地圖的順序;在 特別是,它不能保證該訂單隨着時間的推移將保持恆定 。

Reference

您可以使用LinkedHashMap其維護插入順序或TreeMap

LinkedHashMap

此實現與HashMap的不同之處在於它保持於所有條目的運行 雙向鏈表。此鏈接 列表定義了迭代排序,通常是 中哪些鍵被插入映射(插入順序)中的順序。請注意,如果將密鑰重新插入到地圖中,則 插入順序不受影響。 (A密鑰k被重新插入到地圖米如果m.put(K,V)時 m.containsKey(K)將緊接 調用之前返回true被調用。)

TreeMap

地圖根據其按鍵的自然排序或在地圖創建時提供的Comparator進行排序,具體取決於使用的構造函數。

+0

我的意思是獲取Map條目的第一個元素,所以如果我把條目testMap.put(1,2);我可以分別訪問這些1和2,將它們與其他元素進行比較,或者使用1或2做其他一些東西。 – user2081119 2013-03-02 07:18:31

+0

@ user2081119您可以通過'Map#get(key)'從map中檢索值,它返回與key相關的值else空值。 – 2013-03-02 07:22:54

+0

哦,就是這樣!謝謝你 – user2081119 2013-03-02 07:46:55

0

地圖沒有排序,所以沒有「第一項」這樣的事情,這也是爲什麼Map(或HashMap)上沒有get-by-index方法的原因。

你可以這樣做:

Map<Integer, Integer> map = ...; // wherever you get this from 

// Get the first entry that the iterator returns 
Map.Entry<Integer, Integer> entry = map.entrySet().iterator().next(); 
(Note: Checking for an empty map omitted). 

您的代碼沒有得到地圖中所有的條目,它立即返回(,跳出循環),與同時發現的第一個條目。

注意:調用iterator()並不意味着您正在迭代整個地圖。

0

您可以使用LinkedHashMap其中有方法如firstKeylastKey。但對於第二個關鍵,你必須遍歷,你會得到其中的地圖

0
HashMap <Integer, Integer> testMap = new HashMap <Integer, Integer>(); 
testMap.put (1, 2); 
testMap.put (2, 3); 
Iterator <Integer> i = testMap.values().iterator(); 
System.out.println ("First element: " + i.next()); 
System.out.println ("Second element: " + i.next()); 

注意輸入鍵,以便元素,因爲HashMap不記得加入其中順序的元素,「第一要素」不必要的意思是「第一次加入」。

0
Iterator it = testMap.entrySet().iterator(); 

        while (it.hasNext()) { 
          Map.Entry pairs = (Map.Entry) it.next(); 
          System.out.println("Key"+pairse.getKey()); 
          System.out.println("Value"+pairs.getValue()); 
}