黑马程序员技术交流社区
标题:
关于Comparable<类>比较排序的问题
[打印本页]
作者:
qy
时间:
2011-11-10 16:48
标题:
关于Comparable<类>比较排序的问题
关于学生成绩排序 大家看以下代码:
注:该类实现了Comparable接口
public String name;
public int score;
public int compareTo(类 a)
{
int num=new Integer(this.score).compareTo(new Integer(a.score);
if(num==0)
return this.name.compareTo(a.name);
return score;
}
复制代码
问题来了 --> 两个分数比较后返回的一个整数 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