集合中的两个比较器Comparable和Comparator接口

本文来自 Taking_fish 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u014133299/article/details/78608454?utm_source=copy


简介

Comparable接口

该接口对每个实现它的类的对象强加了排序规则。该排序称之为自然排序(natural ordering)。方法public int compareTo(T o)是自然排序的排序方法。

实现了comparable接口类的List或者arrays对象可以通过调用以下方法进行排序:

1. Collections#sort(List list) //内部是调用第二个方法进行排序
2.  Arrays#sort(Object[] a)       //算法是合并排序或二分排序 n^2算法复杂度

//此外,可以通过将元素添加到一下集合或Map中实现排序
3. SortedMap tm = new TreeMap();
4. SortedSet ts = new TreeSet();

自然排序中,e1.compareTo(e2) == 0的布尔值应该等价于e1.equals(e2)。注意null不属于任何类的实例,故e.compareTo(null)应抛出空指针异常,尽管此时e.equals(null)为false。

实际上,所有实现comparable的类中方法compareTo和equals方法值是等价的。一个特例就是java.math.BigDecimal。

Comparator接口

通过比较两个入参得到顺序。返回值有三种:

1,入参一大于入参二。
0,入参相同。
-1,入参一小于入参二。
实现的类必须保证以下 要求:

sgn(compare(x, y)) == -sgn(compare(y, x))。暗示着compare(x, y)抛异常,则compare(y,x)也抛异常。
((compare(x, y) < 0),((compare(y,z) < 0)暗示着((compare(x,z) < 0)。
compare(x, y)==0暗示着sgn(compare(x, z))==sgn(compare(y, z))。
参数 Comparable Comparator
排序逻辑 排序逻辑必须在待排序对象的类中,故称之为自然排序 排序逻辑在另一个实现
实现 实现Comparable接口 实现Comparator接口
排序方法 int compareTo(Object o1) int compare(Object o1,Object o2)
触发排序 Collections.sort(List) Collections.sort(List, Comparator)
接口所在包 java.lang.Comparable java.util.Comparator

你可能感兴趣的:(java知识)