Java学习笔记:考虑实现Comparable接口

为什么要实现Comparable接口?
实现了Comparable接口的类具有内在的排序关系,同时也可以和许多泛型算法和依赖于该接口的集合实现进行协助。


如何实现Comparable接口?
和Item 8中关于实现equal方法类似,同样需要满足:
传递性--x.compreTo(y) > 0 && y.compareTo(z) > 0 可以推出x.compareTo(z) > 0
改进的对称性--x.compareTo(y) == 0可以推出sgn(x.compareTo(z)) == sgn(y.compareTo(z))
(可选)等同性--x.compareTo(y) == 0就等同于x.equals(y)
与equal方法不同的地方在于不同类之间的compareTo可以直接抛出异常。


关于等同性需要说明的一点是,如果不满足,由于不同的container加载元素采用的比较方法不同,将导致不同的结果,比如TressSet用compareTo方法,HashSet用equals方法,此时加入“1.0”和“1.00”两个元素时,TreeSet认为它们是一样的,而后者执不同观点。

由于compareTo返回值要么为正、要么为负,要么是0,因此可以对compareTo方法作一些调整以减少计算量和代码量。另外涉及到任何2个数之间的操作都需要考虑overflow 和underflow的问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值