Comparable与Comparator接口

Comparable的定义:

package java.lang;

import java.util.*;
public interface Comparable<T> {
    public int compareTo(T o);
}

Comparator的定义:

package java.util;

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

Comparable对实现它的每个类的对象进行整体排序,这个接口需要类本身去实现。若一个类实现了Comparable接口,实现Comparable接口的类的对象的List或Array可以通过 Collections.sortArrays.sort进行排序。此外,实现 Comparable 接口的类的对象可以用作 “有序映射 ( 如 TreeMap)” 中的键或“有序集合 (TreeSet)”中的元素,而不需要指定比较器。

Comparable 是排序接口;若一个类实现了 Comparable 接口,就意味着 “该类支持排序”。而 Comparator 是比较器;我们若需要控制某个类的次序,可以建立一个 “该类的比较器”来进行排序。

前者应该比较固定,和一个具体类相绑定,而后者比较灵活,它可以被用于各个需要比较功能的类使用。可以说前者属于 “静态绑定”,而后者可以 “动态绑定”。

使用方法:

Comparable接口:

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

    public Person1(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public int compareTo(Person1 o) {
        return this.age-o.age;
    }
    @Override 
    public String toString() {
        return name+":"+age;
    }
}
List<Person1> list = new ArrayList<>();
Collections.sort(list);
Comparator接口:
public final class Person2 {
    private int age;
    private String name;

    public Person2(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override 
    public String toString() {
        return name+":"+age;
    }
    //getter and setter方法省略....
}
List<Person2> list2 = new ArrayList<>();
Collections.sort(list2,new Comparator<Person2>() {
    @Override
    public int compare(Person2 o1, Person2 o2) {
        if(o1 == null || o2 == null) {
            return 0;
        }
        return o1.getAge()-o2.getAge();
    }
});
不难发现:Comparable 相当于 “内部比较器”,而 Comparator 相当于 “外部比较器”。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值