1. 程式人生 > 其它 >Java 比較器

Java 比較器

目錄

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