1、compareTo 方法是Comparable 接口的唯一方法
- 没有在Object 中声明
- compareTo 允许等同性比较、顺序比较
- 是个泛型
- 类实现了Comparable 接口 ,它的实例具有内在的排序关系
- 实现了Comparable 接口的对象数组排序非常简单
2、java 平台类库的所有值类(value class)都实现了Comparable 接口
- compareTo 通用约定与equals 相似
- 当该对象与目标对象:大于、等于、小于,返回正数、0、负数
- 无法比较,抛出ClassCastException
sgn 表达式,对于结果为正数、0、负数,分别返回 1、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 不一致
3、违反 compareTo 约定 会破坏其他依赖比较关系的类
- 包括有序集合类TreeSet、TreeMap,工具类Collections、Arrays 内部的搜索、排序算法
- 无法在可变类的子类新增域 ,又保持compareTo 在新老对象之间的一致性(像equals 一样)
- 抽象类可以
- compareTo 是顺序比较,不是等同性比较
- 如果类包含多个关键域,按照关键程度递减比较,返回值不为零,比较结束