2017-04-03 44 views
0

我有一個HashMap中這樣定義:當用Integer鍵迭代HashMap時,它是否總是按升序返回鍵?

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

我通過讓每一個鍵,這樣迭代的地圖上:

for (Integer key : blockPositions.keySet()) { 
    System.out.println(key); 
} 

我的問題是,我可以依靠的價值key總是按升序排列。所以,如果我的HashMap中看起來是這樣的:

{ 
    4: "abc123", 
    1: "def456", 
    11: "qwe789", 
    10: "iop019" 
} 

(我知道這是JSON格式的,這只是讓你得到數據集的想法)。

請問我的循環總是輸出

1 
4 
10 
11 

不管我的數據的順序?

要着重注意,其中的關鍵是增加完全是隨機的順序,我無法控制鍵時添加。

這是一個俄羅斯方塊風格的遊戲,因此讓升序排列的按鍵是必須

+0

你肯定'Map​​'是您要使用的數據結構? – Maroun

+0

看看TreeMap的 – rptmat57

+1

有,你可以發現這一點非常簡單的方法。你不需要我們。它正在測試。 –

回答

8

引用the Javadoc

此類不保證作爲對地圖的順序;特別是,它不能保證訂單會隨着時間的推移保持不變。

沒有爲整數鍵無特殊情況。你根本不能依賴訂單。

如果您希望密鑰按升序排列,請使用SortedMap的實施,如TreeMap

+0

TreeMap是我正在尋找的。感謝 –

+0

雖然你說的話是絕對正確的,按鍵在'HashMap中秩序'是可預測*在有限的程度。*;請參閱http://stackoverflow.com/a/2144822/139985。 (但是,這個事實並不是在應用程序中依靠它是理智的。) –

0

除了@AndyTurner所說的關於HashMap不保證訂單的內容外,看起來TreeMap提供了您正在尋找的功能。

0

沒有,

  1. 爲了保持有序,使用TreeMap的。

  2. 爲了保持插入順序,使用LinkedHashMap的。

相關問題