Java 比較器
阿新 • • 發佈:2021-07-31
目錄
Java比較器
自然排序java.lang.Comparable
1.像String、包裝類等實現了Comparable介面,重寫了compareTo()方法
2.利用Array.sort(Object obj)進行排序,呼叫comparaTo()方法
預設是從小到大升序
規則:
當前物件this大於形參obj時,返回正數
當前物件this小於形參obj時,返回負數
當前物件this等於形成obj時,返回0
這裡按照規則重寫方法,這樣對物件就可以預設從小到大排序
具體的比較是呼叫物件的equals方法
@Override public int comparaTo(Object o){ if(o instanceof Goods){ Goods goods = (Goods) o; //方式一 if(this.price>goods.price){ return 1 ; }else if(this.price<goods.price){ return -1; }else{ return 0; } //方式二 return Double.compare(this.price,goods.price); } } }
自定義排序java.util.Comparator
使用背景
1.元素的型別沒有實現java.lang.Comparable介面而又不方便修改程式碼
2.實現了java.lang.Comparable介面的排序規則不適合當前的操作
實現
重寫compare(Object o1,Object o2)方法,比較o1和o2的大小
//obj為需要比較的類 Arrays.sort(Object obj,new Comparator(){ //利用匿名實現類的方法 @Override public int compare(Object o1,Object o2){ //具體的排序方法 } })
compare返回值
1:表示要調整順序
-1:不用調整順序
Collections.sort(companyList, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if(o1.compareTo(o2) < 0 ){?}
});
如果你想升序,那麼o1比o2小就是我想要的;所以返回-1,類比成false;表示我不想調整順序
如果你想降序,那麼o1比o2小不是我想要的;所以返回1,類比成true;表示我想調整順序
案例
@Override
public int compare(int[] o1,int[] o2){
if(o1[0]==o2[0]){
return Integer.compare(o1[1],o2[1]);
//Integer.compare預設是從小到大排序
//o1[1]>o2[1]時返回1 表示要調整順序
//o1[1]<o2[1]時返回-1 表示不需要調整順序
}
return Integer.compare(o2[0],o1[0]);
}