用Comparator接口进行排序 --java

问题描述:

用Comparator接口对下列四位同学的成绩做降
*序排序,如果成绩一样,那在成绩排序的基础上按照年龄由小到大排序。

解决:

首先了解什么是Comparator? -----比较器接口。
说明:
(01) 若一个类要实现Comparator接口:它一定要实现compareTo(T o1, T o2) 函数,但可以不实现 equals(Object obj) 函数。
为什么可以不实现 equals(Object obj) 函数呢? 因为任何类,默认都是已经实现了equals(Object obj)的。 Java中的一切类都是继承于java.lang.Object,在Object.java中实现了equals(Object obj)函数;所以,其它所有的类也相当于都实现了该函数。

(02) int compare(T o1, T o2) 是“比较o1和o2的大小”。返回“负数”,意味着“o1比o2小”;返回“零”,意味着“o1等于o2”;返回“正数”,意味着“o1大于o2”。
接下来我们用List存放实例对象:

		List<Student> stu = new ArrayList<>();
        stu.add(new Student("贾宝玉",14,85));
        stu.add(new Student("林黛玉",13,90.5));
        stu.add(new Student("史湘云",13,85));
        stu.add(new Student("薛宝钗",15,91));

接下来,我们来看看如何编写代码:

stu.sort(new Comparator<Student>() {
            
            //小->大排序:返回“负数”,意味着“o1比o2小”;返回“零”,意味着“o1等于o2”;返回“正数”,意味着“o1大于o2”。
            //大->小排序:返回“负数”,意味着“o1比o2大”;返回“零”,意味着“o1等于o2”;返回“正数”,意味着“o1小于o2”。
            @Override
            public int compare(Student o1, Student o2) {
                if(o1.getScore()>o2.getScore()) {
                    return -1;
                } else if(o1.getScore()<o2.getScore()){
                    return 1;
                } else if(o1.getScore()==o2.getScore()) {
                    if(o1.getAge()<o2.getAge()) {
                        return -1;
                    }
                    else
                        return 1;
                }
                return 0;
            }
        });

本题先按照成绩降序排序,(大->小排序:返回“负数”,意味着“o1比o2大”;返回“零”,意味着“o1等于o2”;返回“正数”,意味着“o1小于o2”。),按照这句话,先将成绩降序排序。
当遇到成绩一样时,我们需要再利用年龄进行升序排序,(小->大排序:返回“负数”,意味着“o1比o2小”;返回“零”,意味着“o1等于o2”;返回“正数”,意味着“o1大于o2”。)

查看输出:

for(Student s : stu) {
            System.out.println(s);
        }

输出结果
总结一下,这种用Comparator 排序,第一步搞清楚要升序还是降序,第二步:
升序排序:返回“-1”,意味着“o1比o2小”;返回“0”,意味着“o1等于o2”;返回“1”,意味着“o1大于o2”。
降序排序:返回“-1”,意味着“o1比o2大”;返回“0”,意味着“o1等于o2”;返回“0”,意味着“o1小于o2”。
这样就能记住啦!

思考Comparable 。

Comparator 和 Comparable 比较:
Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。而Comparator是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。
参考这篇文章

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值