语言

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) == 0e1.equals(e2)具有相同的布尔值,则表示类e1的自然顺序与e2C。 请注意, null 不是任何类的实例,应该 e.compareTo(null) 引发一个 NullPointerException 即使 e.equals(null) 返回 false。

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

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

几乎所有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)
JniObjectReferenceControlBlock

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

(继承自 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端有效。

适用于