考慮實現Comparable接口(12)

一、compareTo 方法是Comparable 接口的惟一方法java

  • 沒有在Object 中聲明
  • compareTo 容許等同性比較、順序比較
  • 是個泛型
  • 類實現了Comparable 接口 ,它的實例具備內在的排序關係
  • 實現了Comparable 接口的對象數組排序很是簡單

二、java 平臺類庫的全部值類(value class)都實現了Comparable 接口算法

  • compareTo 通用約定與equals 類似
  • 當該對象與目標對象:大於、等於、小於,返回正數、0、負數
  • 沒法比較,拋出ClassCastException

sgn 表達式,對於結果爲正數、0、負數,分別返回 一、0、-1數組

  • 對稱性:sgn(x.compareTo(y))=-sgn(y.compareTo(x))
  • 傳遞性:( x.compareTo(y)>0 && y.compareTo(z)>0) => x.compareTo(z)>0
  • 相等性: x.compareTo(y)==0  =>  sgn( x.compareTo(z))== sgn( y.compareTo(z))
  • equals等價性: (x.compareTo(y)==0)==(x.equals(y))  (強烈建議知足
  • equals等價性 若是不知足,請指明,該類具備內部排序功能,但與equals 不一致

三、違反 compareTo 約定 會破壞其餘依賴比較關係的類工具

  • 包括有序集合類TreeSet、TreeMap,工具類Collections、Arrays 內部的搜索、排序算法
  • 沒法在可變類的子類新增域 ,又保持compareTo 在新老對象之間的一致性(像equals 同樣)
  • 抽象類能夠
  • compareTo 是順序比較,不是等同性比較
  • 若是類包含多個關鍵域,按照關鍵程度遞減比較,返回值不爲零,比較結束
相關文章
相關標籤/搜索