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