黑马程序员技术交流社区

标题: 关于Comparable<类>比较排序的问题 [打印本页]

作者: qy    时间: 2011-11-10 16:48
标题: 关于Comparable<类>比较排序的问题
关于学生成绩排序 大家看以下代码:

注:该类实现了Comparable接口
  1.   public String name;
  2.   public int score;
  3.   public int compareTo(类 a)
  4. {
  5.   int num=new Integer(this.score).compareTo(new Integer(a.score);
  6.   if(num==0)
  7.   return this.name.compareTo(a.name);
  8.   return score;
  9. }
复制代码
问题来了 --> 两个分数比较后返回的一个整数 num,那么这个num具体指的是什么?
还有就是if(num==0) 的条件的意义?

作者: olkldksl    时间: 2011-11-10 18:45
本帖最后由 olkldksl 于 2011-11-10 18:48 编辑

首先实现了comparable就是为了把这个类的对象往TreeSet集合里存放做准备
num可以理解成
num = this.score-a.score;
如果num等于0,说明成绩相等,再判断名字的自然排序;
如果num不等于0,就返回num的值,让TreeMap容器根据这个值的正负去给存入的对象进行排序
作者: 史晓霞    时间: 2011-11-10 18:55
这个类实现了Comparable接口,覆盖了compareTo方法,有两个判断条件,一个按照分数,分数相同按姓名,return score;这句错误,如果不相同返回的应该是num;
作者: qy    时间: 2011-11-10 19:21
赵玉成 发表于 2011-11-10 18:25
你上面程序return score不对吧, 应该是return num; 你是想根据2个对象的score来排序,if(num==0)表示两个 ...

对、应该是return num的。理解 谢咯
作者: 宋文轩    时间: 2011-11-10 19:29
num可以是正数、负数、零,如果是正数则该分数的对象会排在后面。
这个其实写的麻烦了直接写 num=this.score-a.score 就容易理解了 值是正的说明this.score大于a.score所以排后面,a排在前面。如果是零表示两人分数相同,则比较两人姓名按自然顺序排序。




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