Comparable
1. 自己和自己比较,需要实现Comparable 接口
2. 比较的方法: compareTo 方法
3. 在JDK 中典型的应用: TreeSet 中的排序
Comparator
1. 第三方比较器(需要在排序的自己定义)
2. 比较方法: compare
3. 在JDK中的应用: Arrays.sort
4. 如果我们需要控制某个类的顺序,而从类本身又不支持排序且不能对类做任何修改,这是可以用此比较器

(一)Comparable



Comparable是一个排序接口,一个类实现了Comparable比较器,就意味着它本身支持排序,可以用Collections.sort() 或者 Arrays.sort() 进行排序.

此接口给实现类提供了一个排序的方法,此接口有且只有一个方法

public int compareTo(T o);

compareTo方法接受任意类型的参数,来进行比较

list或者数组实现了这个接口能够自动的进行排序,相关类的方法有Collections.sort(),Arrays.sort();

SortedMap 接口的key内置了compareTo方法来进行键排序,SortedSet 也是内置了compareTo方法作为其内部元素的比较手段

Comparable案例:ZJJ_JavaBasic_2020/01/22_16:01:53_6j8l8

(二)Comparator


Comparator 相当于一个比较器,作用和Comparable类似,也是使用Collections.sort() 和 Arrays.sort()来进行排序,也可以对SortedMap 和 SortedSet 的数据结构进行精准的控制,你可以不用实现此接口或者Comparable接口就可以实现次序比较。 TreeSet 和 TreeMap的数据结构底层也是使用Comparator 来实现。不同于Comparable ,比较器可以任选地允许比较null参数,同时保持要求等价关系。

案例:ZJJ_JavaBasic_2020/01/22_15:46:44_xiv6r

(三)Comparable 和 Comparator 的对比


1、Comparable 更像是自然排序

2、Comparator 更像是定制排序

同时存在时采用 Comparator(定制排序)的规则进行比较。

对于一些普通的数据类型(比如 String, Integer, Double…),它们默认实现了Comparable 接口,实现了 compareTo 方法,我们可以直接使用。

而对于一些自定义类,它们可能在不同情况下需要实现不同的比较策略,我们可以新创建 Comparator 接口,然后使用特定的 Comparator 实现进行比较。