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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© RaymonDZ 初级黑马   /  2018-5-1 22:20  /  915 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

目前还处于java基础学习阶段,关于Set集合只会用HashSet,但是出于作业题目的需要自己尝试用了一下TreeSet,它有个好处就是可以自动为数据排序,而源码是用compareTo来实现的。

实践题目:创建学生对象,按照工资从高到底排序输出结果(工资相同,按照年龄从低到高,工资和年龄都相同,按照姓名字典顺序排列)。


[size=15.3333px]我的办法是Student类实现Comparable并[size=15.3333px]重写compareTo方法:
[size=15.3333px]        @Override
[size=15.3333px]        public int compareTo(Student o) {
[size=15.3333px]                int num = o.salary-this.salary;//这样可以降序排列
[size=15.3333px]                int num2= this.age - o.age;//这样就是升序
[size=15.3333px]                if(num == 0) {
[size=15.3333px]                        if(num2 == 0) {
[size=15.3333px]                                return this.name.compareTo(o.name);
[size=15.3333px]                        }
[size=15.3333px]                        return num2;
[size=15.3333px]                }
[size=15.3333px]                return num;

[size=15.3333px]     }
[size=15.3333px]

[size=15.3333px]测试后可以得到这样的结果:
[size=15.3333px]Student [name=赵六, age=32, salary=9000]
Student [name=李四, age=23, salary=6000]
Student [name=钱七, age=25, salary=6000]
Student [name=孙九, age=21, salary=5000]
Student [name=张三, age=21, salary=5000]
Student [name=王五, age=25, salary=5000]
Student [name=朱八, age=28, salary=3000]

但是TreeSet不能接受三个属性都相同的学生对象(即使不重写hashcode和equals方法),所以会进行自动去重。

关于集合我还需要进行更深入地学习,代码如有错误欢迎指正交流,大家一起学习进步,也希望有高手大佬告诉我更好的方法。


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马