如何使用自然的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 。