我的地图包含按字母顺序排序的键。当我显示它时,我正在使用entrySet()。iterator(),但我的结果不是按字母顺序排列。 如何按顺序获得我的结果?
答案 0 :(得分:14)
不,您的地图不按字母顺序保存元素。您可能按顺序排列.put(..)
,但地图没有定义的迭代顺序。
其他人建议使用SortedSet
,但您也可以使用LinkedHashMap
。它保证了迭代顺序:
这个实现(LinkedHashMap)使客户端免受HashMap(和Hashtable)提供的未指定的,通常是混乱的排序,而不会导致与TreeMap相关的成本增加
答案 1 :(得分:12)
使用TreeMap:
基于红黑树的
NavigableMap
实施。地图根据其键的natural ordering或地图创建时提供的Comparator
进行排序,具体取决于使用的构造函数...
答案 2 :(得分:1)
我的地图包含按字母顺序排列的键
事实并非如此。
使用http://download.oracle.com/javase/6/docs/api/java/util/SortedMap.html或在迭代前对键进行排序
答案 3 :(得分:1)
由于HashMap
使用散列来存储基础容器中的条目,因此无法保证任何特定的顺序。如果您希望订购HashMap
的商品,则必须自行分类。
另一方面,TreeMap
将保持某种顺序(你可以通过实现Comparable
接口来指示自己),所以如果你得到它的入口集,它将按字母顺序找到你。 String
已经实现了Comparable
,因此它们将按字母顺序返回给您。
答案 4 :(得分:1)
您可以使用ConcurrentSkipListMap或TreeMap。
答案 5 :(得分:0)
对于在 2020 年及以后发现此问题的任何人...
现在我们有了流,您可以执行以下操作:
map.entrySet()
.stream()
.sorted(Map.Entry.comparingByKey())
.forEach(System.out::println);