java-Comparable

这个接口对每个实现它的类的对象施加了一个总排序,这个排序称为类的自然排序,
这个类的CompareTo 方法被称为自然比较方法

对象的Lists和Arrays实现接口可以被自动排序 通过Collection.sort(List) Collections.sort 和Array.sort(Object[]) Arrays.sort 实现这个接口的对象 可以被用作keys在SortedMap 或者 元素在SortedSet 不需要指定一个Comparator

自然排序给C 可以被称为 consistent with equals 当且仅当e1.compareTo(e2)==0 有同样的boolean 值 作为 e1.equals(e2) 给每个e1和e2 class C类
null不是任何一个类的实例 e.compareTo(null) 应当抛出
一个NullPointerException 即使 e.equals(null)

强烈建议 自然排序应当consistent with equals.
这是因为sorted sets 和 sorted maps 没有没有明确的比较器在使用时表现“奇怪”。
当他们的元素或者keys的自然排序is inconsistent with equals.
特别的 这样的排序 sortedMap 违反了规范。对于集合或map 就equals方法而言

如果增加了两个键 a 和 b {@code (!a.equals(b) && a.compareTo(b) == 0)}
到一个排序的set集合 不用一个显式比较器
第二个add操作返回false 排序set的大小不增加,因为a和b 与sorted set的看法是等价的

几乎所有实现Comparable 的核心类都具有consistent with equals. 的自然排序
一个例外是java.math.BigDecimal
它的自然排序等于BigDecimal的值相等 精度却不同 例如 4.0 和4.00

对于数学倾斜 给指定的类C定义的自然排序relation关系是

   {(x, y) such that x.compareTo(y) <= 0}.

总顺序的商是

  {(x, y) such that x.compareTo(y) == 0}.

紧接着从comparare To 的规范 这个商是等价关系在C上
自然排序是一个总排序在C上

当我们说类的自然排序是 consistent with equals
意味着自然排序的商 和 {@link Object#equals(Object) equals(Object)} 方法是等价的

   {(x, y) such that x.equals(y)}. 

你可能感兴趣的:(jdk)