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 的方法称为其 自然比较方法

实现此接口的对象的列表(和数组)可以按 (和Arrays#sort(Object[]) Arrays.sort) 自动Collections#sort(List) Collections.sort排序。 实现此接口的对象可用作 SortedMap 排序映射中的键或 SortedSet 排序集中的元素,而无需指定比较器比较器。

如果类的布尔值与e1.equals(e2)每个e1e2C具有相同的布尔值,则表示类C的自然顺序与相等e1.compareTo(e2) == 0。 请注意, null 不是任何类的实例,应该 e.compareTo(null) 引发一个 NullPointerException 即使 e.equals(null) 返回 false

强烈建议(虽然不需要)自然排序与相等。 因此,因为在将排序集(和排序映射)与自然排序不一致的元素(或键)一起使用时,没有显式比较器的行为“奇怪”。 具体而言,此类排序集(或排序映射)违反了在方法中 equals 定义的 set(或 map)的一般协定。

例如,如果一个键添加两个键 ab 这样 (!a.equals(b) && a.compareTo(b) == 0) 一个排序集就不会使用显式比较器,则第二 add 个操作将返回 false(以及排序集的大小不会增加),因为 ab 排序集的角度等效。

几乎所有Java实现Comparable的核心类都具有与等值一致的自然排序。 一个例外是 java.math.BigDecimal,其 java.math.BigDecimal#compareTo 自然排序等同于 BigDecimal 具有相同数值的对象和不同的表示形式(如 4.0 和 4.00)。 若要 java.math.BigDecimal#equals BigDecimal.equals() 返回 true,两 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 Collections Framework 的成员。

已在 1.2 中添加。

适用于 . 的 java.lang.ComparableJava 文档

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

属性

名称 说明
Handle

获取基础 Android 对象的 JNI 值。

(继承自 IJavaObject)
JniIdentityHashCode

返回包装实例的值 java.lang.System.identityHashCode()

(继承自 IJavaPeerable)
JniManagedPeerState

托管对等方的状态。

(继承自 IJavaPeerable)
JniPeerMembers

成员访问和调用支持。

(继承自 IJavaPeerable)
PeerReference

返回JniObjectReference包装的Java对象实例。

(继承自 IJavaPeerable)

方法

名称 说明
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)

扩展方法

名称 说明
GetJniTypeName(IJavaPeerable)

获取实例 self类型的 JNI 名称。

JavaAs<TResult>(IJavaPeerable)

尝试强制self键入TResult,检查强制是否在Java端有效。

JavaCast<TResult>(IJavaObject)

执行 Android 运行时检查的类型转换。

JavaCast<TResult>(IJavaObject)

此接口对实现它的每个类的对象施加总排序。

TryJavaCast<TResult>(IJavaPeerable, TResult)

尝试强制self键入TResult,检查强制是否在Java端有效。

适用于