天天看點

Comparator、compare、compareTo

Comparator :是一個接口,有compare(a,b)方法,主要用來排序。

compare(a,b) 方法:根據第一個參數小于、等于或大于第二個參數分别傳回負整數、零或正整數。

compareTo:obj1.compareTo(obj2)如果該方法傳回0,則表示兩個對象相等,如果該方法傳回一個正整數,則表明obj1大于obj2;如果該方法傳回一個負整數,則表明obj1小于obj2。

當compare(a,b)方法傳回值大于0(為true)時,交換o1和o2

以上結論參考:

Java中comparator接口與compare方法的實作

compareTo()方法

為什麼寫成

compare(a,b){return a - b;}

就表示遞減排序了?

鏡像問題:

compare(a,b){return b - a;}

表示遞增排序

public int compare(a,b){
	return a - b;
}
/*
情況一:a > b 
因為a > b是以a - b大于0,交換a,b,大的數排在了後面,是以是遞減排序。

情況二:a < b
因為a < b是以a - b小于0,a,b不交換,小的數在前面,大的數在後面,是以還是遞減排序。
*/
           

比較器的匿名内部類寫法

以NC153 信封嵌套問題為例

Arrays.sort(letters,new Comparator<int[]>(){
    public int compare(int[] a, int[] b){
        if(a[0] == b[0]){
            return b[1] - a[1];
        }
        return a[0] - b[0];
    }
});
           

比較器的lambda寫法

以NC85 拼接所有的字元串産生字典序最小的字元串中的小頂堆建立為例。

PriorityQueue<String> minHeap = new PriorityQueue<>((a,b)->{
    return (a+b).compareTo(b+a);
});