A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhouxp3323 黑马帝   /  2012-3-11 20:34  /  2171 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Comparable接口的compareTo方法是比较此对象与指定对象的顺序,当比较完返回结果后,然后输出的话就会自动按照比较的顺序输出吗?还没怎么搞明白。

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

2 个回复

倒序浏览
你仔细看看毕老师讲解的TreeSet的视频就知道了,对compare(),compareTo(),的覆写只是实现返回比较结果:负数,零,正数时,实现相应集合的比较器或者相应类的比较方法,至于怎么使用这个比较结果,这是TreeSet自己来定的,其内部二叉树排序,自然是放进去就排好顺序了,只是Set中这个顺序和你放入的顺序不一定相同罢了。
回复 使用道具 举报
看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方法,如果返回值为负,则按照倒序的顺序排列,如果返回值为正,则按照正序排列。希望能帮到你。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马