HashMap.entryset()返回的Set,是如何排序的?
The Set returned from HashMap.entryset(), how is it sorted?
我需要复制对从 HashMap class 的函数 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());
}
Returns:
D - 5
E - 2
A - 3
B - 1
C - 4
为什么?注释掉的代码 returns 它们的顺序相同。
I don't understand how it is sorted.
那是因为它不遵循任何特定的顺序。实际排序取决于您放入的项目的哈希码、放入它们的顺序以及哈希桶的数量(与负载因子密切相关)。
No matter in which order I put the items in the HashMap
, it always returns them in the same order.
那是因为item个数相同,item的hash code相同,没有遇到因为hash冲突导致输出重排的顺序
可以构建一个排序,使同一组项目的输出略有不同。然而,外卖教训是顺序不可靠,因此您不应期望您的物品以任何特定顺序出现。
如果您必须保持特定顺序,Java 提供两个不错的选择:
- 您可以使用
LinkedHashMap
基于插入顺序的可预测顺序,或者
- 您可以使用
TreeMap
在键上订购您的物品。
我需要复制对从 HashMap class 的函数 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());
}
Returns:
D - 5
E - 2
A - 3
B - 1
C - 4
为什么?注释掉的代码 returns 它们的顺序相同。
I don't understand how it is sorted.
那是因为它不遵循任何特定的顺序。实际排序取决于您放入的项目的哈希码、放入它们的顺序以及哈希桶的数量(与负载因子密切相关)。
No matter in which order I put the items in the
HashMap
, it always returns them in the same order.
那是因为item个数相同,item的hash code相同,没有遇到因为hash冲突导致输出重排的顺序
可以构建一个排序,使同一组项目的输出略有不同。然而,外卖教训是顺序不可靠,因此您不应期望您的物品以任何特定顺序出现。
如果您必须保持特定顺序,Java 提供两个不错的选择:
- 您可以使用
LinkedHashMap
基于插入顺序的可预测顺序,或者 - 您可以使用
TreeMap
在键上订购您的物品。