2009-02-20 35 views

回答

68

使用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实现工作,你可以将它传递给TreeMapconstructor创建具有排序键新的地图。

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,并在constructor中指定该密钥。

+0

我正在使用的代码给了我一个Map对象,那么如何将其转换为TreeMap或使用TreeMap进行排序呢? – Bialecki 2009-02-20 22:03:06

+0

您可以使用其参数为任何Map的构造函数来创建TreeMap。另外,恭喜埃里克森(我认为,因为你距离10k只有5代表)。 – 2009-02-20 22:05:13

28

你有几个选择。列在优先级顺序:

  1. 使用SortedMap
    SortedMap<whatever> myNewMap = new TreeMap<whatever>(myOldMap);
    如果你想重复一次以上这远远优于。它保持键的排序,所以你不必在迭代之前对它们排序。
  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);

最后两个会得到你想要的东西,但只能使用,如果你只是想重复一次,然后忘记整个事情。

8

您可以在迭代时创建一个排序后的集合,但首先要有一个排序映射更有意义。 (如已经建议)

所有相同的,这里是你如何做到这一点。

Map<String, Object> map; 
for(String key: new TreeSet<String>(map.keySet()) { 
    // accessed in sorted order. 
} 
相关问题