黑马程序员技术交流社区

标题: TreeSet元素唯一性问题 [打印本页]

作者: 漏船载酒    时间: 2016-7-2 03:21
标题: TreeSet元素唯一性问题
请教各位大神,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()实现排序简单呢?

作者: 漏船载酒    时间: 2016-7-2 03:25





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