HashMap是否按字母顺序排序?

4

我有一个如下定义的HashMap:

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

当我将新条目放入此HashMap中时,它们会根据key按字母顺序排列。为什么会这样?如何按照我添加到HashMap中的顺序对它们进行排序?


你说的“以字母顺序结束”是什么意思?能展示一下更多的代码吗? - arshajii
HashMaps不是有序的。而TreeMaps是有序的。 - bcsb1001
5
字符串的自然顺序是字母顺序,而HashMap没有顺序。 - Kayaman
如果您需要插入顺序,请使用LinkedHashMap。 - Chandan Sarma
1
请注意,JDK 的趋势是更频繁地改变迭代顺序,即在 JVM 的每次启动时可能会有所不同。至少对于 Java 9 中的新集合,他们是这样实现的。他们希望通过这样做,用户可以更轻松地识别其代码中不希望出现的顺序依赖关系。 - Zabuzard
4个回答

4
一个HashMap并没有明确定义添加元素的顺序。就像在HashSet中,元素是按它们的哈希码排序的,这更或多或少是随机的。
如果你想保留Map中插入的顺序,可以使用LinkedHashMap。或者如果元素应该在插入后进行排序,则使用TreeMap。

我认为你明确指的是 HashSet,对吗?因为其他的 Set 实现可能不会按照哈希码进行排序。 - Zabuzard
我需要使用 LinkedHashMap 以便它们保持添加的顺序。 - Rabbit Guy

0
LinkedHashMap- preserve the insertion order.
TreeMap - Elements sorted after insertion.

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


0
HashMap的整个意义在于放弃对排序的控制,以便在插入和搜索等方面获得性能提升和其他好处。如果要重新掌控排序,请考虑使用SortedMap

0

HashMap 不会按照你添加的方式添加值,它只是根据键随机添加值。如果想按照添加顺序添加值,请使用 LinkedHashMap;如果想按字母顺序排序,则使用 TreeMap。希望这能解决你的疑问。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接