簡體   English   中英

從HashMap.entryset()返回的Set如何排序?

[英]The Set returned from HashMap.entryset(), how is it sorted?

我需要復制從HashMap類的函數entrySet()返回的集合上獲得的排序。 我不明白它的排序方式。

如下代碼:

HashMap<String, Integer> testList = new HashMap<String, Integer>();
testHash.put("B", 1);
testList.put("A", 3);
testList.put("E", 2);
testList.put("D", 5);
testList.put("C", 4);

//testList.put("B", 1);
//testList.put("C", 4);
//testList.put("A", 3);
//testList.put("E", 2);
//testList.put("D", 5);

for (Map.Entry<String, Integer> entry : testList.entrySet()) {
    System.out.println(entry.getKey() + " - " + entry.getValue());
}

返回:

D - 5
E - 2
A - 3
B - 1
C - 4

為什么? 注釋過的代碼以相同順序返回它們。

我不明白它的排序方式。

那是因為它沒有遵循任何特定的順序。 實際的排序取決於您放入的項目的哈希碼,它們放入的順序以及哈希桶的數量(與負載因子緊密相關)。

無論我將項目放在HashMap中的順序如何,它始終以相同的順序返回它們。

這是因為項目數相同,項目的哈希碼相同,並且您沒有遇到因哈希沖突而導致輸出重新排序的順序。

可以構建一個順序,該順序將為同一組項目產生稍微不同的輸出。 但是,要注意的一點是,訂單不可靠,因此您不應期望自己的商品以任何特定的順序出現。

如果必須維護特定的順序,Java提供了兩個不錯的選擇:

  • 您可以根據插入順序將LinkedHashMap用於可預測的順序,或者
  • 您可以使用TreeMap在鍵上對項目進行排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM