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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 漏船载酒 中级黑马   /  2016-7-2 03:21  /  576 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请教各位大神,TreeSet集合用对象类中compareTo或者实现Comperator接口中compare方法.那么重写hashCode()和equals()方法是不是就完全没用了?
而且集合保证唯一性也会变麻烦.
比如定义Student类,录入五名同学的三门功课成绩,按总分排序打印.
比较器:
TreeSet<Student> ts = new TreeSet<>(new Comparator<Student>() {
                        @Override
                        public int compare(Student o1, Student o2) {
                                int num = o2.getSum() -o1.getSum();
                                return num == 0 ? 0 : num;
                        }
                });
如果"return num == 0 ? 0 : num;"总分相同的学生就不能存入,
如果"return num == 0 ? 1 : num;"同一学生成绩可以反复存,无法保证元素的唯一性,
如果总分相同情况下增加比较姓名,"int temp = o2.getSum() -o1.getSum();
                                      int num = temp ==0 ? o2.getName().compareTo(o1.getName()) : temp ;
                                      return num == 0 ? 0 : num;"
出现重名学生比如"王磊,60,70,80;王磊50,60,100."总分又恰巧一样也会出现成绩不能存入集合.
如果定义总分,姓名,三科成绩每科都相同才认为是同一学生不重复存入,任何一项不满足就存入.就要定义五个变量.类似这样的情况,TreeSet集合用什么方式表达最简练呢?还是用ArrayLis判断集合是否包含该元素再存入,存入完毕再通过写一个sort()实现排序简单呢?

1 个回复

倒序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马