我怎样才能sortingJava中的地图的键?
这是一个非常基本的问题,我对Java不太了解。 我有一个地图,我想要得到一个列表或按sorting顺序的键的东西,所以我可以遍历它们。
使用一个TreeMap
,它是SortedMap
接口的一个实现。 它按照sorting顺序显示其键。
Map<String, Object> map = new TreeMap<String, Object>(); /* Add entries to the map in any order. */ ... /* Now, iterate over the map's contents, sorted by key. */ for (Map.Entry<String, ?> entry : map.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); }
如果您正在使用另一个未按照您的喜好sorting的Map实现,则可以将其传递给TreeMap
的构造函数 ,以使用sorting后的键创build新的地图。
void process(Map<String, Object> original) { Map<String, Object> copy = new TreeMap<String, Object>(original); /* Now use "copy", which will have keys in sorted order. */ ... }
一个TreeMap
可以处理任何types的实现Comparable
接口的关键字,并将它们置于“自然”顺序中。 对于不是Comparable
键,或者其自然顺序不是您需要的键,您可以实现自己的Comparator
并在构造函数中指定它。
你有几个select。 按优先顺序列出:
- 使用
SortedMap
:
SortedMap<whatever> myNewMap = new TreeMap<whatever>(myOldMap);
如果你想迭代多次,这是非常可取的。 它保持键的sorting,所以你不必在迭代之前对它们sorting。 - 没有#2。
- 也没有#3。
-
SortedSet<whatever> keys = new TreeSet<whatever>(myMap.keySet());
-
List<whatever> keys = new ArrayList<whatever>(myMap.keySet()); Collections.sort(keys);
最后两个会得到你想要的,但只有当你只想迭代一次,然后忘记了整个事情。
您可以在迭代时创build一个已sorting的集合,但首先要有一个已sorting的映射更有意义。 (如前所述)
一切都一样,这是你如何做到的。
Map<String, Object> map; for(String key: new TreeSet<String>(map.keySet()) { // accessed in sorted order. }