Java——Comparator 和 Comparable

本文深入探讨了Java中实现自定义类排序的方法,包括实现Comparable和Comparator接口的重要性,以及如何重写compareTo方法来定制排序规则。同时,文章还强调了Java官方类在实现序列化、toString、hashCode和equals方法上的普遍做法,对比了自定义类在这些方面的缺失。

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

1.Comparable

数据排序:JavaApi中,工具类都有排序能力,归其原因,其实现了这两个接口之一。

在这里插入图片描述
而自定义类要想有排序能力,需要实现Comparator这个接口或Comparale接口;
并重写conparato方法;
在这里插入图片描述

Java官方类大部分都实现了Serializble接口,故大部分类都可序列化与反序列化,但你写的不能。
Java官方类大部分都重写超类的toString方法,故大部分类都直接输出用信息,但你写的不能。
Java官方类大部分都重写超类的hashCode方法和equals方法,故大部分类都值比较,但你写的不能。
Java官方类大部分都实现了Comparable接口,故大部分类都可排序,但你写的不能。

在这里插入图片描述

在这里插入图片描述

如上问题,都是在使用javaapi时,未实现这两个接口的原因:

N种写法:

正序:
在这里插入图片描述
逆序:
在这里插入图片描述
多维:
在这里插入图片描述
在这里插入图片描述
对list集合中的狗完成,类似 order by name , age, gender desc的java排序

    @Override
    public int compareTo(Dog other) {
        if (!this.name.equals(other.name)) {
            return this.name.compareTo(other.name);
        }
        if(this.age!=other.age){
            return this.age-other.age;
        }
        if(this.gender!=other.gender){
            return ~(this.gender-other.gender);
        }
        return 0;
    }

Comparator


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值