Java Comparable和Comparator的区别

Comparable 和 Comparator 两者之间的区别:

一个类实现了 Comparable 接口,意味着该类的对象可以直接进行比较(排序),但比较(排序)的方式只有一种,很单一。
一个类如果想要保持原样,又需要进行不同方式的比较(排序),就可以定制比较器(实现 Comparator 接口)。
Comparable 接口在 java.lang 包下,而 Comparator 接口在 java.util 包下。总而言之,如果对象的排序需要基于自然顺序,请选择 Comparable,如果需要按照对象的不同属性进行排序,请选择 Comparator。

一、Comparable

Comparable 接口的定义非常简单,源码如下所示。

public interface Comparable<T> {
    int compareTo(T t);
}

如果一个类实现了 Comparable 接口(只需要干一件事,重写 compareTo() 方法),就可以按照自己制定的规则将由它创建的对象进行比较。下面给出一个例子。

public class Cmower implements Comparable<Cmower> {
    private int age;
    private String name;

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

    @Override
    public int compareTo(Exa o) {
        return this.getAge() - o.getAge();
    }

    public static void main(String[] args) {
        Cmower wanger = new Exa(11,"666");
        Cmower wangsan = new Exa(12,"777");

    }
}


二、Comparator

Comparator 接口的核心的方法只有两个.

public interface Comparator<T> {
    int compare(T o1, T o2);
    boolean equals(Object obj);
}

第一个方法 compare(T o1, T o2) 的返回值可能为负数,零或者正数,代表的意思是第一个对象小于、等于或者大于第二个对象。

第二个方法 equals(Object obj) 需要传入一个 Object 作为参数,并判断该 Object 是否和 Comparator 保持一致。

有时候,我们想让类保持它的原貌,不想主动实现 Comparable 接口,但我们又需要它们之间进行比较,可以继承并重写Comparator中的方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值