`
javawebsoa
  • 浏览: 409289 次
社区版块
存档分类
最新评论

Java学习笔记:(12)考虑实现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的问题
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics