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

© 在学野马 中级黑马   /  2014-9-30 22:55  /  1280 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 在学野马 于 2014-10-1 09:40 编辑
  1. /定义一个Student类继承Comparable
  2. class Student implements Comparable<Student>{
  3.         String name;
  4.         int age;
  5.         int score;
  6.         Student(String name,int age,int score){
  7.             this.name=name;
  8.             this.age=age;
  9.             this.score=score;
  10.         }
复制代码
  1. //先按照分数比较,如果分数相同再按按照年龄比较
  2.         public int compareTo(Student stu){
  3.             if(this.score<stu.score) return 1;      //    这里为什么小于时要返回1,
  4.             else if(this.score>stu.score) return -1
  5.             else if(this.age>stu.age) return 1;
  6.             else if(this.age<stu.age)return -1;
  7.             return 0;                                          // 这里等于时返回零     能具体解释一下吗
  8.         }
复制代码





评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1

查看全部评分

3 个回复

倒序浏览
并不一定是1或-1 是正负数都可以的,正数表示要存入的数据大于当前数据,负数表示要存入的数据小于当前数据,就是依据这个对数据进行排序的.0表示数据相同,不存入
回复 使用道具 举报 1 0
本帖最后由 ζ_____________ 于 2014-10-1 13:05 编辑

这个主要就是要涉及到TreeSet的底层结构___二叉树的数据结构了,建议你重新看一下毕老师对于二叉树结构的那个图 .





该结构中是由compareTo(){ return 0 };//代表元素相同,来确定元素的唯一性的.

两种判断方法:

一种是直接将该类继承Compareable(比较能力),并且将其中的compareTo()方法进行复写.

第二种是在第一种方法不是我们想要的基础上(不要有直接去操作源代码的想法),可能方法一中的比较能力不是我们所需要的,这个时候我们就需要定义一个比较器(程序会优先使用比较器来判断的) 也就是定义一个类,来实现Compartor并且覆盖覆盖里面的compare()方法即可.
这样的话在创建容器的时候直接将比较器传入就能实现了.
回复 使用道具 举报
因为默认排序是从小到大(也即是返回负数的情况),但是我们需要的分数时要从高到低.所以就需要返回正数
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马