Map存儲的是key->value的值對,key的值是唯一的,而value的值可以重複。通常使用的是HashMap或TreeMap,如果考慮性能,使用HashMap。TreeMap使用紅黑樹實作,保留有key值順序性,會自動按照key值排序。
預設是按照key值的升序排序,key值必須實作 Comparator接口。如果希望按找一定規則排序,則需要重新定義compare函數。
如:
TreeMap hm = new TreeMap(new Comparator() {
public int compare(Object o1, Object o2) {
//如果有空值,直接傳回0
if (o1 == null || o2 == null)
return 0;
return String.valueOf(o1).compareTo(String.valueOf(o2));
}
});
對于處理有中文排序的問題
TreeMap hm = new TreeMap(new Comparator() {
public int compare(Object o1, Object o2) {
//如果有空值,直接傳回0
if (o1 == null || o2 == null)
return 0;
CollationKey ck1 = collator.getCollationKey(String.valueOf(o1));
CollationKey ck2 = collator.getCollationKey(String.valueOf(o2));
return ck1.compareTo(ck2);
}
});
備注: CollationKey:CollationKey 表示遵守特定 Collator 對象規則的 String。
比較兩個CollationKey 将傳回它們所表示的 String 的相對順序。使用 CollationKey 來比較 String 通常比使用 Collator.compare 更快。是以,當必須多次比較 String 時 (例如,對一個 String 清單進行排序),使用 CollationKey 會更高效。
如果想按照value排序或者是對HashMap中的key或value排序則可以如下:
List> list = new ArrayList>(m.entrySet());
Collections.sort(list,new Comparator>(){
public int compare(Map.Entry o1, Map.Entry o2){
return o2.getValue()-o1.getValue();
}
});&