【发布时间】:2021-04-14 16:32:48
【问题描述】:
我有一个关于哈希映射序列的问题。例如,在以下代码中:
public class MapEntrySetOrder {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
String[] l = new String[]{"Entry", "Set", "HashMap", "Order"};
for (String s : l) {
map.putIfAbsent(s, s);
}
for(Map.Entry<String, String> e : map.entrySet()) {
System.out.println("key:" + e.getKey());
}
}
}
我知道在 hashmap 中没有维护顺序,但是每次我通过循环打印键时,所有键的顺序都是相同的,并且顺序不是从原始列表的开头也不是从原始列表的末尾列表:
key:Order
key:Entry
key:Set
key:HashMap
那么顺序是如何决定的。如果是随机的,为什么每次打印都是一样的结果?
【问题讨论】:
-
如果是随机的,就叫
RandomMap.???? -
重要的是使用 HashMap 的编码人员明白他们不能依赖顺序。或许你可以在 HashMap 源码中找到你的答案?
-
为什么每次打印结果都是一样的?在不同的java版本上试一试,你会发现不同。 Hashmap 中的顺序不保证