您的位置:首页 > 其它

第十二条:考虑实现Comparable接口

2016-04-26 14:26 295 查看

compareTo方法并没有在Object中声明,它是Comparable接口中唯一的方法。compareTo方法不但允许进行简单的等同性比价,而且允许执行顺序比较,它与Object的equals方法具有相似的特征,它还是个泛型。

类实现了Comparable接口,就表明它的实例具有内在的排序关系

一旦类实现了Comparable接口,它就可以跟许多泛型算法以及依赖于该接口的集合实现协作。比如按字母顺序,按数值顺序或者按年代顺序,compareTo方法的通用约定于equals方法的相似:

将这个对象与指定的对象进行比较。当该对象小于、等于或大于指定对象的时候,分别返回一个负数、零或者正整数。如果由于指定对象的类型而无法与该对象进行比较,则抛出ClassCastException异常。

在下面的说明中,符号sgn(表达式)表示数学中的signum函数,它根据表达式的值为负值、零和正值,分别返回-1、0和1。

必须确保所有的x和y都满足sgn(x.compareTo(y)) == -sgn(y.compareTo(x))。

必须确保这个比较关系是可以传递的:(x.compareTo(y) > 0 && y.compareTo(z) > 0)暗示着x.compareTo(z) > 0。

最后,必须确保x.compareTo(y) == 0 暗示着所有的z都满足sgn(x.compareTo(z)) == sgn(y.compareTo(z))

强烈建议(x.compareTo(y) == 0) == (x.equals(y)),这个绝非必要,一般来说,任何实现了Comparable接口的类,若违反了这个条件,都应该明确说明。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: