Java 在地图中循环时,如何确定顺序

Java 在地图中循环时,如何确定顺序,java,hashmap,Java,Hashmap,我有一个关于哈希映射序列的问题。例如,在以下代码中: public class MapEntrySetOrder { public static void main(String[] args) { Map<String,String> map = new HashMap<>(); String[] l = new String[]{"Entry", "Set", "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
不保证任何顺序。
如果您想使用有序序列,请改用。

对于快速非有序映射,请使用HashMap

使用LinkedHashMap获取添加到映射的顺序

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


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

如果是随机的,它将被称为
RandomMap
。重要的是,使用HashMap的编码人员知道他们不能依赖顺序。也许你可以在HashMap源代码中找到你的答案?这能回答你的问题吗?为什么每次打印结果都一样?在不同的java版本上尝试一下,您会发现其中的差异。Hashmap中的顺序无法保证
key:Order
key:Entry
key:Set
key:HashMap