【问题标题】:How is the sequence decided when looping through map [duplicate]循环遍历地图时如何确定顺序[重复]
【发布时间】: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 中的顺序不保证

标签: java hashmap


【解决方案1】:

HashMap 用于快速无序映射

使用 LinkedHashMap 添加到 Map 的顺序

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-10-16
      • 2013-12-06
      • 2011-02-20
      • 2023-03-14
      • 2011-06-18
      • 1970-01-01
      相关资源
      最近更新 更多