黑马程序员技术交流社区
标题:
TreeSet通过重写比较器中方法排序
[打印本页]
作者:
王一勇
时间:
2014-7-16 00:34
标题:
TreeSet通过重写比较器中方法排序
本帖最后由 王一勇 于 2014-7-16 00:41 编辑
如下代码:通过匿名内部类的方式重写了compare方法,想问的是为什么在Comare中定义了一个int num,对num作减运算 并返回num就能对集合排序了?还在神乎中.......求解。
TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
int num = s2.getSum() - s1.getSum();//s1中数学,语文,英语成绩之和高的排前面
int num2 = num == 0 ? s1.getChinese() - s2.getChinese() : num;//若三项成绩和相等,语文成绩高的排前面
int num3 = num2 == 0 ? s1.getMath() - s2.getMath() : num2;//若语文成绩还相同,再比较数学成绩高的排前面
return num3;
}
});
作者:
wisely
时间:
2014-7-16 00:39
:funk:
楼主的这个例子太强悍了,不易理解。建议看一下毕老师的视频,具体的是第15天04、05这两个,讲解的非常清楚。
作者:
fantacyleo
时间:
2014-7-16 00:55
为什么能排序,跟你怎么实现Comparator接口无关。之所以能排序,是因为TreeSet在存入元素的时候,会按照二叉树的排序规则,将你要存入的元素和已存在的元素进行比较,而比较结果所依据的就是你传入的实现了Comparator接口的匿名对象的compare方法。
具体的二叉树排序规则,老毕的视频里其实也没讲完整,但初学者就不要深究了,把视频里讲的掌握即可
作者:
于龙超123
时间:
2014-7-22 00:11
有点深奥!
作者:
w306752855
时间:
2014-7-22 00:29
学习一下
作者:
cheye0207
时间:
2014-7-22 02:42
个人感觉返回值错了。。。
作者:
渠嘉树
时间:
2014-7-22 02:56
好复杂.....
作者:
744919632
时间:
2015-11-24 00:21
自定义的的比较器是那么写的,就是这么一回事。不必深究。还有2楼的哥们说的对,我就不重复了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2