如何在 HashMap 中保留插入顺序? [复制]

Posted

技术标签:

【中文标题】如何在 HashMap 中保留插入顺序? [复制]【英文标题】:How to preserve insertion order in HashMap? [duplicate] 【发布时间】:2022-01-21 13:43:30 【问题描述】:

我正在使用HashMap。当我遍历地图时,数据以(通常相同的)随机顺序返回。但是数据是按特定顺序插入的,我需要保留插入顺序。我该怎么做?

【问题讨论】:

docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html 【参考方案1】:

LinkedHashMap 正是您要找的。​​p>

它与HashMap 完全一样,只是当您对其进行迭代时,它会按插入顺序显示项目。

【讨论】:

根据 java doc 它说:这个链表定义了迭代顺序,这通常是键被插入到映射中的顺序。¿¿¿¿¿ 通常 ???????这是什么意思?订单插入不保证.... @Xenione:您可以在插入顺序和访问顺序之间进行选择。查看bit.ly/1jZXlCl的最后一个参数 @Xenione [请注意,如果将键重新插入到地图中,插入顺序不会受到影响],当一个键被放置两次时,第二次放置不会改变顺序,因此迭代顺序不会由于键的唯一性,正是插入顺序;通常意味着如果键是唯一的 构造函数给出一个“插入顺序” Map,但构造函数(int,float,boolean),如果第三个参数为真,则允许创建“访问顺序”LinkedHashMap 在这种情况下,get 的调用会影响顺序, 顺序是访问最少的优先 这使得使用 java.util.Comparator<T>java.util.Collections.sort() 明确不必要,感谢您提供非常有用的信息。【参考方案2】:

HashMap 在文档的第二行中是无序的:

这个类不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。

也许您可以按照 aix 的建议使用 LinkedHashMap 或其他有序集合。在Choosing the right Collection 上查看 javapractices.com 的指南。

【讨论】:

以上是关于如何在 HashMap 中保留插入顺序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何保留 $in 查询的游标顺序? [复制]

在Java中遍历HashMap时如何确保键的顺序不能改变? [复制]

如何在yaml cpp中保留插入顺序

为啥哈希表不保持插入顺序? [复制]

从 HashMap 中检索的值的顺序是插入顺序吗

Java中常见数据结构Map之LinkedHashMap