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 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);
});