对于类 C 的每一个 e1 和 e2 来说,当且仅当 e1.compareTo(e2) == 0 与 e1.equals(e2) 具有相同的 boolean 值时,类 C 的自然排序才叫做与 equals 一致。
注意如果要正确实现 Set 接口则 set 维护的顺序(无论是否提供了显式比较器)必须与 equals 一致。
1、Collectons 类使用 sort方法时,有两个方法。
|
sort(List<T> list) 根据元素的自然顺序 对指定列表按升序进行排序。 |
|
static
|
sort(List<T> list, Comparator<? super T> c) 根据指定比较器产生的顺序对指定列表进行排序。 |
第一个方法中排序使用自然顺序,传入了继承Comparble 的list
2、再来看Comparable
此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。实现此接口的对象列表(和数组)可以通过 Collections.sort(和 Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
也就是Comparable 默认使用 CompareTo方法作排序(自然顺序)。
3、对于类 C 的每一个 e1 和 e2 来说,当且仅当 e1.compareTo(e2) == 0 与 e1.equals(e2) 具有相同的 boolean 值时,类 C 的自然排序才叫做与 equals 一致。
也就是说保证 e1.compareTo(e2) == 0和e1.equals(e2) 得到的结果相同。
4、它的作用在于
如果我们向 set中插入a元素与b元素
假如(!a.equals(b) && a.compareTo(b) == 0)
我们表面看a.equals(b)为fales ,ab不同可以全部插入
事实上a.compareTo(b) == 0 为true ,在set看来ab是相同的,无法全部插入,会造成第二个元素插入失败。
谢谢回复,这是API的内容呀,能否举个具体的实例呢?