【问题标题】:Hashmap is put into alphabetical order?Hashmap按字母顺序排列?
【发布时间】:2017-08-08 17:00:14
【问题描述】:

我有一个 HashMap 定义如下:

private final Map<String, DataTable> reports = new HashMap();

当我将新条目放入此 HashMap 时,它们最终会根据键按字母顺序排列。为什么要这样做?如何按照添加到 HashMap 的顺序排列它们?

【问题讨论】:

  • “按字母顺序结束”是什么意思?你能展示更多的代码吗?
  • HashMap 没有排序。树图是。
  • 字符串的自然顺序字母顺序,而HashMap没有顺序。
  • 如果您需要广告订单,请使用linkedHashmap
  • 另请注意,JDK 中的趋势是更频繁地更改迭代顺序,即每次启动 JVM 时可能会有所不同。至少他们以这种方式为 Java 9 中的新集合实现了它。他们希望通过这样做,用户可以更轻松地识别代码中不需要的顺序依赖关系。

标签: java hashmap


【解决方案1】:

HashMap 确实明确定义了您添加的元素的顺序。就像在HashSet 中一样,元素通过它们的哈希码是有序的,这或多或少是随机的。

如果您想按照插入顺序保留 Map 中的顺序,您可以改用 LinkedHashMap。如果元素应该在插入后进行排序,或者使用TreeMap

【讨论】:

  • 我认为Set 的意思是HashSet,是吗?因为其他Set 实现可能不按哈希码排序。
  • 我需要 LinkedHashMap 以便它们保持添加顺序。
【解决方案2】:

HashMap 的全部意义在于您放弃了对排序的控制,这样您就可以获得插入和搜索的性能提升以及其他好处。要收回对排序的控制权,请考虑使用 SortedMap

【讨论】:

    【解决方案3】:
    LinkedHashMap- preserve the insertion order.
    TreeMap - Elements sorted after insertion.
    

    HashMap 不维护任何插入元素的顺序。

    【讨论】:

      【解决方案4】:

      HashMap 不会以您添加的方式添加值,它只是根据键随机添加值。要按您添加的顺序添加值,请使用LinkedHashMap,或者如果您希望地图按字母顺序排列,请使用 TreeMap。我希望这能消除你的疑问。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-29
        • 2016-01-23
        • 1970-01-01
        相关资源
        最近更新 更多