語言

IComparable 介面

定義

此介面對實作它的每個類別物件施加總排序。

[Android.Runtime.Register("java/lang/Comparable", "", "Java.Lang.IComparableInvoker")]
[Java.Interop.JavaTypeParameters(new System.String[] { "T" })]
public interface IComparable : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/lang/Comparable", "", "Java.Lang.IComparableInvoker")>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "T" })>]
type IComparable = interface
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
衍生
屬性
實作

備註

此介面對實作它的每個類別物件施加總排序。 這種排序稱為類別的 自然排序,類別的方法 compareTo 稱為 其自然比較方法。

實作此介面的物件清單(及陣列)可依 (及Collections#sort(List) Collections.sort)自動Arrays#sort(Object[]) Arrays.sort排序。 實作此介面的物件可作為 SortedMap 排序映射中的鍵,或作為 SortedSet 排序集合中的元素使用,無需指定比較器比較器。

一個類別 C 的自然排序稱為 與 相容 當且僅當 e1.compareTo(e2) == 0 其布林值 e1.equals(e2) 與 的 e1e2C相同時。 注意 不是 null 任何類別的實例,應該 e.compareTo(null) 拋出 一個 NullPointerException 即使 e.equals(null)false返回 。

強烈建議(但非強制)自然排序與等值一致。 這是因為沒有明確比較器的排序集合(及排序映射)在與自然排序與等型不一致的元素(或鍵)使用時,會表現得「奇怪」。 特別地,這種排序集合(或排序映射)違反了集合(或映射)的一般契約,而該契約是根據該 equals 方法定義的。

例如,若對一個未使用顯式比較器的a排序集合加上兩個鍵 b 和 (!a.equals(b) && a.compareTo(b) == 0) ,add則第二個運算回傳為假(且排序集合的大小不變),因為a從排序集合的角度來看 和 b 是等價的。

幾乎所有實作Comparable的 Java 核心類別都有與等值一致的自然排序。 一個例外是 java.math.BigDecimal,其 java.math.BigDecimal#compareTo 自然排序將 BigDecimal 數值相等且表示方式不同的物件相等(例如 4.0 和 4.00)。 為了 java.math.BigDecimal#equals BigDecimal.equals() 返回真,兩個 BigDecimal 物件的表示法和數值必須相同。

對於數學傾向者來說,定義某一類 C 自然序的 關係 為:

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

此總階的 商 為:

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

從 的compareTo契約可立即推論,商關係是 上的C,且自然序是 上的C。 當我們說一個類別的自然排序 與等於 相容時,我們的意思是該自然排序的商關係是由該類別 Object#equals(Object) equals(Object) 的方法所定義的等價關係:

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

換句話說,當一個類別的自然排序與等價相容時,由方法的等價關係 equals 定義的等價類與由該方法的商 compareTo 定義的等價類是相同的。

此介面是 Java 集合框架的成員。

在 1.2 版本中加入。

Java 文件 java.lang.Comparable。

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

屬性

名稱 Description
Handle

取得底層 Android 物件的 JNI 值。

(繼承來源 IJavaObject)
JniIdentityHashCode

回傳包裹實例的 java.lang.System.identityHashCode() 值。

(繼承來源 IJavaPeerable)
JniManagedPeerState

管理貴族的狀況。

(繼承來源 IJavaPeerable)
JniObjectReferenceControlBlock

此介面對實作它的每個類別物件施加總排序。

(繼承來源 IJavaPeerable)
JniPeerMembers

成員存取與召喚支援。

(繼承來源 IJavaPeerable)
PeerReference

回傳JniObjectReference包裹後的 Java 物件實例。

(繼承來源 IJavaPeerable)

方法

名稱 Description
CompareTo(Object)

將此物件與指定的物件比較排序。

Disposed()

當實例被處理後才被召喚。

(繼承來源 IJavaPeerable)
DisposeUnlessReferenced()

如果沒有未解決的參考資料,則 Dispose()呼叫;否則,則不做任何事。

(繼承來源 IJavaPeerable)
Finalized()

當實例完成後才會被通知。

(繼承來源 IJavaPeerable)
SetJniIdentityHashCode(Int32)

將回傳的值設為 JniIdentityHashCode。

(繼承來源 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

此介面對實作它的每個類別物件施加總排序。

(繼承來源 IJavaPeerable)
SetPeerReference(JniObjectReference)

將回傳的值設為 PeerReference。

(繼承來源 IJavaPeerable)
UnregisterFromRuntime()

取消註冊此實例,讓執行時不會在未來 Java.Interop.JniRuntime+JniValueManager.PeekValue 的呼叫中回傳該實例。

(繼承來源 IJavaPeerable)

擴充方法

名稱 Description
GetJniTypeName(IJavaPeerable)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時檢查型別轉換。

JavaCast<TResult>(IJavaObject)

此介面對實作它的每個類別物件施加總排序。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於