这是一个非常基本的问题,我对Java不太满意.我有一个Map,我想按排序顺序得到一个列表或一些键,所以我可以迭代它们.
使用a TreeMap
,这是SortedMap
接口的实现.它按排序顺序显示其键.
Mapmap = new TreeMap (); /* Add entries to the map in any order. */ ... /* Now, iterate over the map's contents, sorted by key. */ for (Map.Entry entry : map.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); }
如果你与你喜欢的未分类其他Map实现工作,你可以将它传递给构造函数的TreeMap
建立与排序键新的地图.
void process(Maporiginal) { Map copy = new TreeMap (original); /* Now use "copy", which will have keys in sorted order. */ ... }
A TreeMap
可以使用任何类型的密钥来实现Comparable
接口,将它们置于"自然"顺序中.对于不是Comparable
或者其自然排序不是您需要的键,您可以实现自己的键Comparator
并在构造函数中指定它.
你有几个选择.按优先顺序列出:
使用SortedMap
:
SortedMap
如果你想多次迭代,这是非常可取的.它使键保持排序,因此您无需在迭代之前对它们进行排序.
没有#2.
也没有#3.
SortedSet
List
最后两个将为您提供您想要的,但只有在您只想迭代一次然后忘记整个事情时才应该使用.
您可以在迭代时创建已排序的集合,但首先有一个排序的映射更有意义.(正如已经建议的那样)
同样,这是你如何做到这一点.
Mapmap; for(String key: new TreeSet (map.keySet()) { // accessed in sorted order. }