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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马姗姗 中级黑马   /  2013-12-26 22:24  /  1663 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

实现compare

但在主函数中,只是创建了实现类的对象,没有调用方法,程序结果却是排序好的,为什么,是怎么实现的呢?




运行结果:


评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

2 个回复

正序浏览
本帖最后由 Diaraelo 于 2013-12-26 22:33 编辑

因为TreeSet方法在构件时就是有顺序存储的, TressSet在建立时候就构造一个新的空 set,该 set 根据其元素的自然顺序进行排序。可以理解为在建立时候你实现了比较方法后,他就自然会在存储时候调用,称为自然排序。
回复 使用道具 举报
本帖最后由 75100313 于 2013-12-26 22:47 编辑
  1. <div class="blockcode"><blockquote>
  2. 比如说有一个Person类 就这么写
  3. public int compareTo(Person p){
  4. //方法中就是Person的自然顺序
  5. //对类中的成员变量,进行自然顺序比较
  6. int num = this.name.compareTo(p.name);
  7. return num == 0?this.age - p.age:num;
复制代码



要想用TreeSet对你存储的对象进行排序  你对象必须要实现 Comparable<T>接口实现自然排序, 并且覆盖compareTo 方法才可以
TreeSet排序的依据就是看compareTo的返回值
第一个先存进的对象没有可以比较的,直接存,后存进去的对象会调用自己的compareTo 方法 把前面存的对象传递进来进行比较 , 结果有三种情况:
1.如果得负数 往前存
2.如果得正数 往后存
3.如果得0 那就代表两个对象一样 不存了








评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马