2009-02-20 34 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. 
} 
相關問題