考虑实现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 是顺序比较,不是等同性比较
  • 若是类包含多个关键域,按照关键程度递减比较,返回值不为零,比较结束
相关文章
相关标签/搜索