一、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 是順序比較,不是等同性比較
- 若是類包含多個關鍵域,按照關鍵程度遞減比較,返回值不爲零,比較結束