遍历地图时如何确定顺序

时间:2021-01-08 23:59:42

标签: java hashmap

我有一个关于哈希映射序列的问题。例如,在以下代码中:

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

那么顺序是如何决定的。如果是随机的,为什么每次打印出来的结果都是一样的?

2 个答案:

答案 0 :(得分:1)

使用 HashMap 实现快速无序 Map

使用 LinkedHashMap 作为添加到 Map 的顺序

将 TreeMap 用于您希望的任何顺序(使用 Comparator 实现)

此外,我认为您每次都有相同的顺序,因为您使用 map.entrySet() 而不是 map.keySet()

答案 1 :(得分:0)

Hashmap 不保证任何顺序。 如果您想要有序序列,请改用 LinkedHashMap