download:基于 React + Redux/Mobx 搞定简单我的项目状态治理

1.字面含意不同

咱们先从二者的字面含意来了解它,Comparable 翻译为中文是“比拟”的意思,而 Comparator 是“比拟器”的意思。Comparable 是以 -able 结尾的,示意它本身具备着某种能力,而 Comparator 是以 -or 结尾,示意本身是比拟的参与者,这是从字面含意先来了解二者的不同。

2.用法不同

二者都是顶级的接口,但领有的办法和用法是不同的,上面咱们别离来看。

2.1 Comparable

Comparable 接口只有一个办法 compareTo,实现 Comparable 接口并重写 compareTo 办法就能够实现某个类的排序了,它反对 Collections.sort 和 Arrays.sort 的排序。

在咱们没有应用 Comparable 时,程序的执行是这样的:

import lombok.Getter;import lombok.Setter;import lombok.ToString;import java.util.ArrayList;import java.util.List;public class ComparableExample {    public static void main(String[] args) {        // 创建对象        Person p1 = new Person(1, 18, "Java");        Person p2 = new Person(2, 22, "MySQL");        Person p3 = new Person(3, 6, "Redis");        // 增加到汇合        List<Person> list = new ArrayList<>();        list.add(p1);        list.add(p2);        list.add(p3);        // 打印汇合信息        list.forEach(p -> System.out.println(p.getName() +                ":" + p.getAge()));    }}// 以下 set/get/toString 都应用的是 lombok 提供的注解@Getter @Setter@ToStringclass Person {    private int id;    private int age;    private String name;    public Person(int id, int age, String name) {        this.id = id;        this.age = age;        this.name = name;    }}

程序执行后果如下:

从上图能够看出,当自定义类 Person 没有实现 Comparable 时,List 汇合是没有排序的,只能以元素的插入程序作为输入的程序。

然而这个时候,老板有一个需要:须要依据 Person 对象的年龄 age 属性进行倒序,也就是依据 age 属性从大到小进行排序,这个时候就能够请出,咱们本文的配角:Comparable 出场了。

Comparable 的应用是在自定义对象的类中实现 Comparable 接口,并重写 compareTo 办法来实现自定义排序规定的,具体实现代码如下:

import lombok.Getter;import lombok.Setter;import lombok.ToString;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class ComparableExample {    public static void main(String[] args) {        // 创建对象        Person p1 = new Person(1, 18, "Java");        Person p2 = new Person(2, 22, "MySQL");        Person p3 = new Person(3, 6, "Redis");        // 增加对象到汇合        List<Person> list = new ArrayList<>();        list.add(p1);        list.add(p2);        list.add(p3);        // 进行排序操作(依据 Person 类中 compareTo 中定义的排序规定)        Collections.sort(list);        // 输入汇合中的程序        list.forEach(p -> System.out.println(p.getName() +                ":" + p.getAge()));    }}