关于java:如何使用自然的entrySet()顺序迭代HashMap?

How to iterate a HashMap using the natural entrySet() order?

我的地图包含按字母顺序排序的键。 当我显示它时,我正在使用entrySet()。iterator(),但我的结果不是按字母顺序排列。
如何才能按顺序获得结果?


不,您的地图不按字母顺序保存元素。您可能按此顺序拥有.put(..),但地图没有定义的迭代顺序。

其他人建议使用SortedSet,但你也可以使用LinkedHashMap。它保证了迭代顺序:

This implementation (LinkedHashMap) spares its clients from the unspecified, generally chaotic ordering provided by HashMap (and Hashtable), without incurring the increased cost associated with TreeMap


使用TreeMap:

A Red-Black tree based NavigableMap implementation. The map is sorted according to the natural ordering of its keys, or by a Comparator provided at map creation time, depending on which constructor is used...


您可以使用ConcurrentSkipListMap或TreeMap。


由于HashMap使用散列来存储基础容器中的条目,因此无法保证任何特定顺序。如果您希望订购HashMap的条目,则必须自己对其进行排序。

另一方面,TreeMap将保持某种顺序(您可以通过实现Comparable接口来指示自己),因此如果您获得其条目集,它将按字母顺序出现。 String已经实现Comparable,因此它们将按字母顺序返回给您。


My Map contains keys sorted in alphabetical order

这不是真的。

使用http://download.oracle.com/javase/6/docs/api/java/util/SortedMap.html或在迭代前对键进行排序