[英]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.