考虑实现Comparable接口(12)

1、compareTo 方法是Comparable 接口的唯一方法

  • 没有在Object 中声明
  • compareTo 允许等同性比较、顺序比较
  • 是个泛型
  • 类实现了Comparable 接口 ,它的实例具有内在的排序关系
  • 实现了Comparable 接口的对象数组排序非常简单

080308_pGpB_3847203.png

2、java 平台类库的所有值类(value class)都实现了Comparable 接口

  • compareTo 通用约定与equals 相似
  • 当该对象与目标对象:大于、等于、小于,返回正数、0、负数
  • 无法比较,抛出ClassCastException

084233_M26k_3847203.png

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 是顺序比较,不是等同性比较
  • 如果类包含多个关键域,按照关键程度递减比较,返回值不为零,比较结束

转载于:https://my.oschina.net/u/3847203/blog/1820991

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值