Comparable和Comparator接口

本文介绍了Java中对象比较的两种方式:实现Comparable接口和Comparator接口。通过示例展示了如何按照价格对Car对象进行排序。Comparable接口适用于类自身的排序规则,而Comparator接口则提供了更灵活的排序方式,可在需要改变排序条件时避免修改原有代码。

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

Java中如果涉及到对象之间的比较,则可以实现Comparable接口重写compareTo(T o)方法,或者实现Comparator接口重写compare(T o1,T o2)方法自定义规则的比较对象之间属性的操作。

Comparable接口:

在这里插入图片描述提供一个实现Comparable接口的类Car,我们按照Car的价格从小到大排序。

class Car implements Comparable<Object>{
    private int price;
    private int size;
    @Override
    public int compareTo(Object o) {
        //为了避免类型转换异常,使用instanceof判断
        if(o instanceof Car){
            //按照价格高低比较,使用Integer包装类提供的compare(方法)
            return Integer.compare(this.price, ((Car) o).price);
        }
       return 0;
    }
}

测试:
在这里插入图片描述

Comparator接口:

在这里插入图片描述

方式一:写一个类实现Comparator接口

class CarPrice implements Comparator<Object>{
    @Override
    public int compare(Object o1, Object o2) {
        //确保不会产生类型转换异常
        if(o1 instanceof Car && o2 instanceof Car){
            return Integer.compare(((Car) o1).getPrice(), ((Car) o2).getPrice());
        }
        return 0;
    }
}

测试:

在这里插入图片描述方式二:内部类的方式

在这里插入图片描述

对比:

如果通过实现Comparable接口定制排序,缺乏灵活性。Comparator接口比较临时,需要更改排序条件时可以不更改之前的排序,直接定制新的排序规则。
实现Comparable接口就是为了使用CompareTo方法,而实现Comparator是为了使用对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值