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

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

使用TreeMap :

基于红黑树的NavigableMap实现。 地图根据其键的自然顺序排序 ,或者由地图创建时提供的Comparator 排序 ,具体取决于使用的构造函数…

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

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

这个实现(LinkedHashMap)使客户端免受HashMap(和Hashtable)提供的未指定的,通常是混乱的排序,而不会导致与TreeMap相关的成本增加

我的地图包含按字母顺序排序的键

这不是真的。

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

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

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

您可以使用ConcurrentSkipListMap或TreeMap 。