用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
    评论
好的,我可以回答这个问题。Comparator接口Java中用于比较两个对象的接口,可以用于排序等操作。如果我们想要对一个对象列表进行排序,可以使用Collections.sort()方法,并且指定一个Comparator对象作为参数来实现排序。下面是一个使用Comparator接口进行排序的示例代码: 假设我们有一个Student类,有两个属性,分别是姓名和年龄。 ```java public class Student { private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } ``` 现在我们有一个Student对象列表,我们想要按照年龄升序排序,可以使用以下代码: ```java List<Student> studentList = new ArrayList<>(); studentList.add(new Student("张三", 18)); studentList.add(new Student("李四", 20)); studentList.add(new Student("王五", 19)); Collections.sort(studentList, new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { return o1.getAge() - o2.getAge(); } }); ``` 在上面的代码中,我们创建了一个Comparator对象,实现了compare方法,该方法接收两个Student对象作为参数,并返回一个int值,表示比较的结果。如果返回一个负数,则表示o1比o2小;如果返回一个正数,则表示o1比o2大;如果返回0,则表示o1等于o2。最后,我们调用Collections.sort()方法,并将studentList和Comparator对象作为参数传入,即可对列表进行排序。 希望这个示例可以帮助你理解如何使用Comparator接口进行排序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值