IComparable 介面
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
此介面對實作它的每個類別物件施加總排序。
[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 版本中加入。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
屬性
| 名稱 | Description |
|---|---|
| Handle |
取得底層 Android 物件的 JNI 值。 (繼承來源 IJavaObject) |
| JniIdentityHashCode |
回傳包裹實例的 |
| JniManagedPeerState |
管理貴族的狀況。 (繼承來源 IJavaPeerable) |
| JniObjectReferenceControlBlock |
此介面對實作它的每個類別物件施加總排序。 (繼承來源 IJavaPeerable) |
| JniPeerMembers |
成員存取與召喚支援。 (繼承來源 IJavaPeerable) |
| PeerReference |
回傳JniObjectReference包裹後的 Java 物件實例。 (繼承來源 IJavaPeerable) |
方法
| 名稱 | Description |
|---|---|
| CompareTo(Object) |
將此物件與指定的物件比較排序。 |
| Disposed() |
當實例被處理後才被召喚。 (繼承來源 IJavaPeerable) |
| DisposeUnlessReferenced() |
如果沒有未解決的參考資料,則 |
| Finalized() |
當實例完成後才會被通知。 (繼承來源 IJavaPeerable) |
| SetJniIdentityHashCode(Int32) |
將回傳的值設為 |
| SetJniManagedPeerState(JniManagedPeerStates) |
此介面對實作它的每個類別物件施加總排序。 (繼承來源 IJavaPeerable) |
| SetPeerReference(JniObjectReference) |
將回傳的值設為 |
| UnregisterFromRuntime() |
取消註冊此實例,讓執行時不會在未來 Java.Interop.JniRuntime+JniValueManager.PeekValue 的呼叫中回傳該實例。 (繼承來源 IJavaPeerable) |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
此介面對實作它的每個類別物件施加總排序。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |