這是一個非常基本的問題,我對Java不太好。我有一個地圖,我想獲得一個列表或按排序順序的關鍵字,所以我可以遍歷它們。如何對Java中Map的鍵進行排序?
44
A
回答
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實現工作,你可以將它傳遞給TreeMap
的constructor創建具有排序鍵新的地圖。
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中指定該密鑰。
28
你有幾個選擇。列在優先級順序:
- 使用
SortedMap
:
SortedMap<whatever> myNewMap = new TreeMap<whatever>(myOldMap);
如果你想重複一次以上這遠遠優於。它保持鍵的排序,所以你不必在迭代之前對它們排序。 - 沒有#2。
- 也沒有#3。
SortedSet<whatever> keys = new TreeSet<whatever>(myMap.keySet());
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.
}
相關問題
- 1. 在mapreduce中對map函數中的鍵值對進行排序
- 2. Java PriorityList,如何對它進行排序?
- 3. Java如何對multimap進行排序vs?
- 4. 我們如何使用SortedMap接口來對Map進行排序?
- 5. 如何按值列表對Map進行排序?
- 6. 如何用java中的對象對鏈表進行排序
- 7. 如何從java中的命令行對姓氏進行排序
- 8. Java:對地圖進行排序,根據內部地圖對<Long,Map <String,Data >>進行排序
- 9. 如何使用C#中的鍵對NameValueCollection進行排序?
- 10. 如何通過Scala中的鍵對字典進行排序?
- 11. 如何通過PHP中的鍵對數組進行排序?
- 12. 如何有效地對類對象的鍵(ksort)進行排序?
- 13. 如何根據鍵對我的JSON對象進行排序?
- 14. 如何對Java中ArrayList中的某些項目進行排序?
- 15. 如何在java中對arraylist中的元素進行排序?
- 16. std :: map - 如何更改鍵排序?
- 17. 如何在java中對對象進行排序?
- 18. 如何在Java中對對象數組進行排序
- 19. 如何在Java中對JSON對象進行排序?
- 20. 在Java中對ArrayList進行排序
- 21. 在java中對JSONArray進行排序
- 22. 如何基於兩個鍵值對數組鍵進行排序?
- 23. 根據關鍵字進行Java排序
- 24. 如何使用js中的鍵的值以升序對對象進行排序?
- 25. 如何對java中的字母數字字符進行排序?
- 26. 如何基於java中的多個值對JsonArray進行排序?
- 27. 如何使用java 8中的reduce對列表進行排序?
- 28. Java中的PriorityQueue如何對重複條目進行排序?
- 29. 如何對java中的MAC地址列表進行排序?
- 30. 如何使用.stream()對java8中的<Map <String,Object >>進行排序?
我正在使用的代碼給了我一個Map對象,那麼如何將其轉換爲TreeMap或使用TreeMap進行排序呢? – Bialecki 2009-02-20 22:03:06
您可以使用其參數爲任何Map的構造函數來創建TreeMap。另外,恭喜埃裏克森(我認爲,因爲你距離10k只有5代表)。 – 2009-02-20 22:05:13