我有一个关于哈希映射序列的问题。例如,在以下代码中:
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
那么顺序是如何决定的。如果是随机的,为什么每次打印出来的结果都是一样的?
答案 0 :(得分:1)
使用 HashMap 实现快速无序 Map
使用 LinkedHashMap 作为添加到 Map 的顺序
将 TreeMap 用于您希望的任何顺序(使用 Comparator 实现)
此外,我认为您每次都有相同的顺序,因为您使用 map.entrySet()
而不是 map.keySet()
答案 1 :(得分:0)
Hashmap
不保证任何顺序。
如果您想要有序序列,请改用 LinkedHashMap。