黑马程序员技术交流社区

标题: Comparable接口 的compareTo方法 [打印本页]

作者: zhouxp3323    时间: 2012-3-11 20:34
标题: Comparable接口 的compareTo方法
Comparable接口的compareTo方法是比较此对象与指定对象的顺序,当比较完返回结果后,然后输出的话就会自动按照比较的顺序输出吗?还没怎么搞明白。
作者: 许圣建    时间: 2012-3-12 01:32
你仔细看看毕老师讲解的TreeSet的视频就知道了,对compare(),compareTo(),的覆写只是实现返回比较结果:负数,零,正数时,实现相应集合的比较器或者相应类的比较方法,至于怎么使用这个比较结果,这是TreeSet自己来定的,其内部二叉树排序,自然是放进去就排好顺序了,只是Set中这个顺序和你放入的顺序不一定相同罢了。
作者: 罗闯    时间: 2012-3-12 15:33
看JDK的解释比较详细:
compareTo
int compareTo(T o)比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
实现类必须确保对于所有的 x 和 y 都存在 sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) 的关系。(这意味着如果 y.compareTo(x) 抛出一个异常,则 x.compareTo(y) 也要抛出一个异常。)

实现类还必须确保关系是可传递的:(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 接口和违背此条件的类都应该清楚地指出这一事实。推荐如此阐述:“注意:此类具有与 equals 不一致的自然排序。”

在前面的描述中,符号 sgn(expression) 指定 signum 数学函数,该函数根据 expression 的值是负数、零还是正数,分别返回 -1、0 或 1 中的一个值。






好比说一个比较一个集合中的10,20,30,40,重写该int compareTo方法,如果返回值为负,则按照倒序的顺序排列,如果返回值为正,则按照正序排列。希望能帮到你。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2