Most visited

Recently visited

Added in API level 1

Comparable

public interface Comparable

java.lang.Comparable<T>
Known Indirect Subclasses


该接口对每个实现它的类的对象进行总排序。 这种排序被称为类的自然排序 ,类的compareTo的方法,只要它的自然比较方法提及。

实现此接口的对象的列表(和数组)可以由Collections.sort (和Arrays.sort )自动排序。 实现该接口的对象,可以使用如在键sorted map或作为在元件sorted set ,而不需要指定一个comparator

当且仅当e1.compareTo(e2) == 0e1e2类别C的布尔值与e1.equals(e2)的布尔值具有相同的布尔值时, C类的自然排序才被认为与等于一致 请注意, null不是任何类的实例, e.compareTo(null)应该抛出NullPointerException,即使e.equals(null)返回false

强烈建议(但不要求)自然排序与平等一致。 这是因为排序集合(和排序映射)没有显式比较器时,它们与自然排序与equals不一致的元素(或键)一起使用时表现得“奇怪”。 特别是,这样一个有序集合(或有序映射)违反了集合(或映射)的一般契约,这是根据equals方法定义的。

例如,如果添加两个键 ab ,使得 (!a.equals(b) && a.compareTo(b) == 0)对于不使用显式比较器的有序集合,则第二个 add操作返回false(并且有序集合的大小不会增加),因为 ab是等效的从排序集的角度来看。

几乎所有实现了Comparable的 Java核心类都具有与平等一致的自然排序。 一个例外是java.math.BigDecimal ,其自然排序等同具有相同值和不同精度(例如4.0和4.00)的BigDecimal对象。

对于数学上倾斜的,定义给定类C的自然排序的 关系是:

       {(x, y) such that x.compareTo(y) <= 0}.
 
The quotient for this total order is:
       {(x, y) such that x.compareTo(y) == 0}.
 
It follows immediately from the contract for compareTo that the quotient is an equivalence relation on C, and that the natural ordering is a total order on C. When we say that a class's natural ordering is consistent with equals, we mean that the quotient for the natural ordering is the equivalence relation defined by the class's equals(Object) method:
     {(x, y) such that x.equals(y)}. 

该界面是 Java Collections Framework的成员。

也可以看看:

Summary

Public methods

abstract int compareTo(T o)

将此对象与指定的对象进行比较以进行排序。

Public methods

compareTo

Added in API level 1
int compareTo (T o)

将此对象与指定的对象进行比较以进行排序。 返回负整数,零或正整数,因为此对象小于,等于或大于指定的对象。

实现程序必须确保sgn(x.compareTo(y)) == -sgn(y.compareTo(x))所有xy。 (这意味着如果y.compareTo(x)引发异常,则x.compareTo(y)必须抛出异常。)

实现者还必须确保该关系是可传递的: (x.compareTo(y)>0 && y.compareTo(z)>0)意味着 x.compareTo(z)>0

最后,执行者必须确保 x.compareTo(y)==0暗示 sgn(x.compareTo(z)) == sgn(y.compareTo(z)) ,全部为 z

强烈建议,但不是严格要求(x.compareTo(y)==0) == (x.equals(y)) 一般来说,任何实现Comparable接口并违反此条件的类都应清楚地指出这一事实。 推荐的语言是“注意:这个类的自然排序与equals不一致”。

在前面的描述中,符号 sgn( ) 表达式表示数学 符号函数,其定义根据 表达式的值是否为负,零或正返回的 -1一个 ,0,1。

Parameters
o T: the object to be compared.
Returns
int a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
Throws
NullPointerException if the specified object is null
ClassCastException if the specified object's type prevents it from being compared to this object.

Hooray!