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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王一勇 中级黑马   /  2014-7-16 00:34  /  4248 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王一勇 于 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;
                        }
                });

7 个回复

倒序浏览
:funk:

楼主的这个例子太强悍了,不易理解。建议看一下毕老师的视频,具体的是第15天04、05这两个,讲解的非常清楚。
回复 使用道具 举报
为什么能排序,跟你怎么实现Comparator接口无关。之所以能排序,是因为TreeSet在存入元素的时候,会按照二叉树的排序规则,将你要存入的元素和已存在的元素进行比较,而比较结果所依据的就是你传入的实现了Comparator接口的匿名对象的compare方法。

具体的二叉树排序规则,老毕的视频里其实也没讲完整,但初学者就不要深究了,把视频里讲的掌握即可
回复 使用道具 举报
有点深奥!
回复 使用道具 举报
学习一下
回复 使用道具 举报
个人感觉返回值错了。。。
回复 使用道具 举报
好复杂.....
回复 使用道具 举报
自定义的的比较器是那么写的,就是这么一回事。不必深究。还有2楼的哥们说的对,我就不重复了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马