我需要复制从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
在钥匙上订购您的物品