如何在Java中对Map的键进行排序?


问题内容

这是一个非常基本的问题,我对Java并不是很好。我有一个Map,我想按排序顺序获取列表或某些键,以便可以对其进行迭代。


问题答案:

使用TreeMap,这是SortedMap接口的实现。它按排序顺序显示其密钥。

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());
}

如果您使用的另一个Map实现没有按照您的喜好进行排序,则可以将其传递给的构造函数TreeMap以使用排序键创建新的Map。

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与实现Comparable接口的任何类型的键一起使用的键,将它们按“自然”顺序放置。对于不需要的键Comparable或不需要的自然键,可以实现自己的键,Comparator并在构造函数中指定该键。