【问题标题】:hashmap keyset automatically sortedhashmap keyset 自动排序
【发布时间】:2013-07-28 16:34:04
【问题描述】:
    HashMap<String, String[]> content = new HashMap<String, String[]>();

    content.put("Help", new String[]{"About"});
    content.put("View", new String[]{"Grid"});
    content.put("File", new String[]{"Import", "Export"});

    for(String key : content.keySet()){
        System.out.println(key);
    }

以上代码日志:

View
Help
File

但是为什么要这样排序呢?

【问题讨论】:

  • 运行两次,三次,更多......你会看到不同的结果。
  • 碰巧。添加更多的键,你会看到它没有排序。
  • 重启了 10 次,但始终是相同的顺序。
  • 您可能会运行非常非常多次的代码,并且顺序将是相同的,因为它取决于两个因素 - KEY 的 hashCode 和后备数组的长度。每当您导致 HashMap 的后备数组增长时,您就会失去订单。请覆盖我的教程Internal life of HashMap
  • @VolodymyrLevytskyi 您的链接已损坏,但我能够在网络档案中找到它。见Internal life of HashMap。太棒了,谢谢!

标签: java hashmap


【解决方案1】:
  1. HashMap 绝对不保证迭代顺序。当添加新元素时,它甚至可以(并且将会)完全改变。

  2. LinkedHashMap 将按照条目放入映射的顺序进行迭代

Source

【讨论】:

  • 关于 2 条语句。您可以创建 LinkedHashMap,它将按访问顺序而不是插入顺序进行迭代。插入顺序只是默认的一种。
【解决方案2】:

您在HashMap 中看到条目的顺序取决于我相信的键的哈希码和存储桶中条目的顺序,这取决于实现,但不要依赖HashMap订购。而LinkedHashMapTreeMap 保证一定的顺序。

【讨论】:

    猜你喜欢
    • 2018-08-08
    • 2021-11-25
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2010-12-25
    • 2016-02-05
    相关资源
    最近更新 更多