繁体   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