鴻蒙OS Comparable

2022-04-28 16:51 更新

Comparable

public interface Comparable<T>

該接口對實現(xiàn)它的每個類的對象進行了總排序。這種排序稱為類的自然排序,類的 compareTo 方法稱為其自然比較方法。

實現(xiàn)此接口的對象列表(和數(shù)組)可以通過 Collections#sort(List)(和 [Arrays#sort(Object]))自動排序。實現(xiàn)此接口的對象可以用作 SortedMap 中的鍵或用作 SortedSet 中的元素,而無需指定 Comparator。

當且僅當 e1.compareTo(e2) == 0 對于類 C 的每個 e1 和 e2 具有與 e1.equals(e2) 相同的布爾值時,類 C 的自然排序被稱為與 equals 一致。注意null 不是任何類的實例,即使 e.equals(null) 返回 false,e.compareTo(null) 也應該拋出 NullPointerException。

強烈建議(盡管不是必需的)自然排序與 equals 一致。之所以如此,是因為沒有顯式比較器的排序集(和排序映射)在與自然順序與等于不一致的元素(或鍵)一起使用時表現(xiàn)“奇怪”。特別是,這樣的排序集合(或排序映射)違反了集合(或映射)的一般合同,該合同是根據(jù) equals 方法定義的。

例如,如果添加兩個鍵 a 和 b 使得 (!a.equals(b) && a.compareTo(b) == 0) 到不使用顯式比較器的排序集,則第二個添加操作返回 false (并且排序集的大小不會增加)因為從排序集的角度來看 a 和 b 是等價的。

幾乎所有實現(xiàn) Comparable 的 Java 核心類都具有與 equals 一致的自然順序。一個例外是 java.math.BigDecimal,它的自然排序等同于具有相同值和不同精度的 BigDecimal 對象(例如 4.0 和 4.00)。

對于數(shù)學傾向,定義給定類 C 的自然排序的關系是:

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

這個總訂單的商是:

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

從 compareTo 的約定可以直接得出,商是 C 上的等價關系,自然排序是 C 上的全序。當我們說類的自然排序與 equals 一致時,我們的意思是 自然排序是類的 Object#equals(Object) 方法定義的等價關系:

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

此接口是 Java 集合框架的成員。

方法總結

修飾符和類型 方法 描述
int compareTo(T o) 將此對象與指定對象進行比較以進行排序。

方法詳情

compareTo

int compareTo(T o)

將此對象與指定對象進行比較以進行排序。返回負整數(shù)、零或正整數(shù),因為此對象小于、等于或大于指定對象。

實現(xiàn)者必須確保所有 x 和 y 的 sgn(x.compareTo(y)) == -sgn(y.compareTo(x))。 (這意味著如果 y.compareTo(x) 拋出異常,則 x.compareTo(y) 必須拋出異常。)

實現(xiàn)者還必須確保關系是可傳遞的:(x.compareTo(y)>0 && y.compareTo(z)>0) 意味著 x.compareTo(z)>0。

最后,實現(xiàn)者必須確保 x.compareTo(y)==0 意味著 sgn(x.compareTo(z)) == sgn(y.compareTo(z)),對于所有 z。

強烈建議但不嚴格要求 (x.compareTo(y)==0) == (x.equals(y))。一般來說,任何實現(xiàn)了 Comparable 接口并違反此條件的類都應該清楚地表明這一事實。推薦的語言是“注意:這個類有一個與equals不一致的自然順序。”

在前面的描述中,符號sgn(expression)表示數(shù)學符號函數(shù),它被定義為根據(jù)表達式的值是負數(shù)、零還是正數(shù)返回-1、0或1之一。

參數(shù):

參數(shù)名稱 參數(shù)描述
o the object to be compared.

返回:

負整數(shù)、零或正整數(shù),因為此對象小于、等于或大于指定對象。

Throws:

Throw名稱 Throw描述
NullPointerException 如果指定的對象為空
ClassCastException 如果指定對象的類型阻止它與此對象進行比較。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號