为啥map.put不维护键的顺序[重复]

Posted

技术标签:

【中文标题】为啥map.put不维护键的顺序[重复]【英文标题】:Why is map.put not maintaining the ordering of keys [duplicate]为什么map.put不维护键的顺序[重复] 【发布时间】:2015-04-28 23:45:03 【问题描述】:

我已经定义了一个字典:

Map<String, Integer>

然后在代码中,我将条目添加到集合中:

map.put("> 80", // some stream() + lambda based logic for calculating the value part);
map.put("60 - 80", ....);
map.put("40 - 60", ....);
map.put("20 - 40", ....);
map.put(" < 40", ....);

稍后在调试模式下,我看到键的顺序发生了变化。例如“20 -40”在前,“60-80”在后。为什么键的顺序会改变?如何维护集合中键的顺序。

【问题讨论】:

HashMap 不保证键的顺序。如果要保持输入的顺序,请使用 LinkedHashMap 你可能想创建一个新类,比如说Range,它是可比较的,并有一个TreeMap&lt;Range, Integer&gt;。它可能比传统答案“使用LinkedHashMap 在迭代时保持插入顺序”更适合您的需求。 HashMap 的 javadoc 声明“此类不保证映射的顺序;特别是,它不保证顺序会随着时间的推移保持不变。” 【参考方案1】:

如果您希望保持键的顺序,您应该使用LinkedHashMap,默认情况下,它会根据键的插入顺序对其进行迭代。

【讨论】:

以上是关于为啥map.put不维护键的顺序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Map 的其他实现类:LinkedHashMap

如何维护 Java 属性文件中键的顺序?

Map转json数据出现顺序乱的问题

json.loads 更改传递的字符串中给定键的顺序[重复]

服务器与本地机器上dict键的随机顺序[重复]

集合知识点