Java TreeMap 升序|降序排列
阿新 • • 發佈:2019-01-08
import java.util.Comparator; import java.util.TreeMap; public class Main { public static void main(String[] args) { TreeMap<Integer,Integer> map1 = new TreeMap<Integer,Integer>(); //預設的TreeMap升序排列 TreeMap<Integer,Integer> map2= new TreeMap<Integer,Integer>(new Comparator<Integer>(){ /* * int compare(Object o1, Object o2) 返回一個基本型別的整型, * 返回負數表示:o1 小於o2, * 返回0 表示:o1和o2相等, * 返回正數表示:o1大於o2。 */ public int compare(Integer a,Integer b){ return b-a; } }); map2.put(1,2); map2.put(2,4); map2.put(7, 1); map2.put(5,2); System.out.println("Map2="+map2); map1.put(1,2); map1.put(2,4); map1.put(7, 1); map1.put(5,2); System.out.println("map1="+map1); } }
分析:可以通過自定義compare函式,來實現各種型別的排序。
以下內容取至Api:
TreeMap
public TreeMap()
- 使用鍵的自然順序構造一個新的、空的樹對映。插入該對映的所有鍵都必須實現
Comparable
介面。另外,所有這些鍵都必須是可互相比較的:對於對映中的任意兩個鍵 k1 和 k2,執行 k1.compareTo(k2) 都不得丟擲 ClassCastException。如果使用者試圖將違反此約束的鍵新增到對映中(例如,使用者試圖將字串鍵新增到鍵為整數的對映中),則 put(Object key, Object value) 呼叫將丟擲 ClassCastException
TreeMap
public TreeMap(Comparator<? super K> comparator)
- 構造一個新的、空的樹對映,該對映根據給定比較器進行排序。插入該對映的所有鍵都必須由給定比較器進行相互比較:對於對映中的任意兩個鍵
k1 和 k2,執行 comparator.compare(k1, k2) 都不得丟擲 ClassCastException。如果使用者試圖將違反此約束的鍵放入對映中,則
put(Object key, Object value) 呼叫將丟擲 ClassCastException。
- 引數:
comparator
- 將用來對此對映進行排序的比較器。如果該引數為 null
java.util
介面 Comparator<T>
- 型別引數:
T
- 此 Comparator 可以比較的物件型別
compare
int compare(T o1, T o2)
- 比較用來排序的兩個引數。根據第一個引數小於、等於或大於第二個引數分別返回負整數、零或正整數。
在前面的描述中,符號 sgn(expression) 表示 signum 數學函式,根據 expression 的值為負數、0 還是正數,該函式分別返回 -1、0 或 1。
實現程式必須確保對於所有的 x 和 y 而言,都存在 sgn(compare(x, y)) == -sgn(compare(y, x))。(這意味著當且僅當 compare(y, x) 丟擲異常時 compare(x, y) 才必須丟擲異常。)
實現程式還必須確保關係是可傳遞的:((compare(x, y)>0) && (compare(y, z)>0)) 意味著 compare(x, z)>0。
最後,實現程式必須確保 compare(x, y)==0 意味著對於所有的 z 而言,都存在 sgn(compare(x, z))==sgn(compare(y, z))。
雖然這種情況很普遍,但並不 嚴格要求 (compare(x, y)==0) == (x.equals(y))。一般說來,任何違背這個條件的 Comparator 都應該清楚地指出這一事實。推薦的語言是“注意:此 Comparator 強行進行與 equals 不一致的排序。”
-
- 引數:
o1
- 要比較的第一個物件。o2
- 要比較的第二個物件。- 返回:
- 根據第一個引數小於、等於或大於第二個引數分別返回負整數、零或正整數。
- 丟擲:
- - 如果引數的型別不允許此 Comparator 對它們進行比較。