【算法&数据结构体系篇class06】:比较器

文章介绍了如何在Java中使用比较器Comparator对自定义对象进行排序,包括如何定义内部比较器和外部比较器,以及根据对象的属性进行升序或降序排列。示例代码展示了对学生对象按ID和年龄排序,并涉及到TreeMap的有序存储和PriorityQueue的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业务中经常需要对数据做一个排序动作,比如有系统自带的比较函数,Arrays.sort(),对一个基础数据类型做排序,但我们业务中更多的数据类型是封装成一个对象,面向对象进行数据处理。而自己的实体类就需要自己来定义比较器了,用系统自带是无法实现的。

比较器有内部比较器和外部比较器,这里将外部比较器,拓展性更好

一、比较器核心

  • 定义一个比较器类,该类需要实现Comparator<T> 接口,然后类里需要实现抽象方法compare()方法,这里就是定义数据的排序方式,是升序还是降序。

  • compare()方法的返回值是int类型,这里需要注意返回值分三种 -1,0,1:

// 如果返回负数,认为方法的第一个参数(即对象)应该排在前面

// 如果返回正数,认为第二个参数应该排在前面

// 如果返回0,认为谁放前面无所谓

二、比较器代码

自定义比较器类如下:

package class06;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;

public class ShowComparator {

    public static class Student {
        public String name;
        public int id;
        public int age;

        public Student(String name, int id, int age) {
            this.name = name;
            this.id = id;
            this.age = age;
        }
    }

    // 谁id大,谁放前!
    public static class IdComparator implements Comparator<Student> {

        // 如果返回负数,认为第一个参数应该排在前面
        // 如果返回正数,认为第二个参数应该排在前面
        // 如果返回0,认为谁放前面无所谓
        @Override
        public int compare(Student o1, Student o2) {
            if (o1.id < o2.id) {
                return 1;
            } else if (o2.id < o1.id) {
                return -1;
            } else {
                return 0;
            }
        }
    }
    
    // 谁age大,谁放前!
    public static class AgeComparator implements Comparator<Student> {

        // 如果返回负数,认为第一个参数应该排在前面
        // 如果返回正数,认为第二个参数应该排在前面
        // 如果返回0,认为谁放前面无所谓
        @Override
        public int compare(Student o1, Student o2) {
            if (o1.age < o2.age) {
                return 1;
            } else if (o2.age < o1.age)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值