我怎样才能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。 按优先顺序列出:

  1. 使用SortedMap
    SortedMap<whatever> myNewMap = new TreeMap<whatever>(myOldMap);
    如果你想迭代多次,这是非常可取的。 它保持键的sorting,所以你不必在迭代之前对它们sorting。
  2. 没有#2。
  3. 也没有#3。
  4. SortedSet<whatever> keys = new TreeSet<whatever>(myMap.keySet());
  5. 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. }