黑马程序员技术交流社区

标题: copare 排序问题 [打印本页]

作者: tujiu888    时间: 2016-2-9 21:05
标题: copare 排序问题
int num = o.salary - this.salary;         //为什么工资从高到低排序就是这样写
                num = (num == 0 ? this.age - o.age : num);                 //为什么年龄从低到高就是这样排序
                num = (num == 0 ? this.name.compareTo(o.name) : num);
                num = (num == 0 ? 1 : num);
                return num;


作者: 宋达思    时间: 2016-2-12 10:33
本帖最后由 宋达思 于 2016-2-12 10:48 编辑

工资的这个salary是你创建的对象的int型的属性吗?我记得一般比较的话首先要确认主要的比较因素和次要的比较因素,你好像主要想比较工资是吧,如果这个salary是int类型的话,当然可以这么写了。然后是比较次要因素,当当前的num等于0时(即两个人的工资相等时)开始比较次要因素:比较age的话因为是基本数据类型,所以可以直接减的;name一般是String,是引用数据类型,所以就要调用方法了,但是最后都是可以返回正整数、负整数或0的。最后通过比较过这些主要次要因素后最后返回num的值,当然如果一上来salary不相等的话,下面应该就都不用比较了。
作者: tujiu888    时间: 2016-2-12 14:42
宋达思 发表于 2016-2-12 10:33
工资的这个salary是你创建的对象的int型的属性吗?我记得一般比较的话首先要确认主要的比较因素和次要的比 ...

我的意思是为什么o.salary - this.salary 就是工资从高到低排序
                        this.salary - o.salary 就是工资从低到高排序
作者: 宋达思    时间: 2016-2-12 18:37
因为这样的话每两个对象之间的减法结果都变了啊,原本是正整数的结果肯定会变成负整数,你把所有对象添加排序一遍后,整体减法的结果肯定是反的啊,所以当然反着排了。




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