我可以分別訪問HashMap的第一個和第二個元素嗎? 我的意思是,如果我有一個HashMap訪問HashMap的元素
Map<Integer, Integer> testMap = new HashMap<Integer, Integer>();
int f = testMap.first();
我知道有沒有這樣的功能,但我怎麼能訪問元素?
我可以分別訪問HashMap的第一個和第二個元素嗎? 我的意思是,如果我有一個HashMap訪問HashMap的元素
Map<Integer, Integer> testMap = new HashMap<Integer, Integer>();
int f = testMap.first();
我知道有沒有這樣的功能,但我怎麼能訪問元素?
HashMap
不維護秩序。
這個類不能保證地圖的順序;在 特別是,它不能保證該訂單隨着時間的推移將保持恆定 。
您可以使用LinkedHashMap
其維護插入順序或TreeMap
。
此實現與HashMap的不同之處在於它保持於所有條目的運行 雙向鏈表。此鏈接 列表定義了迭代排序,通常是 中哪些鍵被插入映射(插入順序)中的順序。請注意,如果將密鑰重新插入到地圖中,則 插入順序不受影響。 (A密鑰k被重新插入到地圖米如果m.put(K,V)時 m.containsKey(K)將緊接 調用之前返回true被調用。)
地圖根據其按鍵的自然排序或在地圖創建時提供的Comparator
進行排序,具體取決於使用的構造函數。
地圖沒有排序,所以沒有「第一項」這樣的事情,這也是爲什麼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()
並不意味着您正在迭代整個地圖。
沒有。您不能像HapMap/HashTable那樣將數據存儲在包含鍵和值的(http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Map.Entry.html)的Entry中。
你總是可以獲得entrySet()的迭代器並訪問條目。或者嘗試獲取僅返回一組密鑰的keySet()。
希望這有助於。
您可以使用LinkedHashMap
其中有方法如firstKey
和lastKey
。但對於第二個關鍵,你必須遍歷,你會得到其中的地圖
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
不記得加入其中順序的元素,「第一要素」不必要的意思是「第一次加入」。
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());
}
我的意思是獲取Map條目的第一個元素,所以如果我把條目testMap.put(1,2);我可以分別訪問這些1和2,將它們與其他元素進行比較,或者使用1或2做其他一些東西。 – user2081119 2013-03-02 07:18:31
@ user2081119您可以通過'Map#get(key)'從map中檢索值,它返回與key相關的值else空值。 – 2013-03-02 07:22:54
哦,就是這樣!謝謝你 – user2081119 2013-03-02 07:46:55