Java源码解析 Comparable<T>

本文深入探讨了Java.lang.Comparable接口的用途、方法及其实现细节,包括如何通过compareTo方法进行自然排序,以及与equals方法的一致性要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

位置:java.lang.Comparable<T>
类型:interface
用途:
这个接口规定了实现它的每个类的对象进行整体排序。这个顺序被称为类的自然顺序,和类的compareTo方法作为它的自然比较方法提及。列表(和数组)实现此接口的对象可以自动Collections.sort(和Arrays.sort)进行排序。实现该接口的对象可被用作在一个有序映射或作为有序集合的元素的键,而不需要指定一个比较器。对于C类的自然顺序被说成是与equals一致当且仅当e1.compareTo(E2)== 0具有相同的布尔值作为e1.equals(E2)类C.注意的每e1和e2是null不是任何类的实例,并e.compareTo(空)应该抛出一个NullPointerException异常,即使e.equals(空)返回false。 强烈推荐(虽然不是必需的)使自然排序与equals一致。这是因为有序集合(和有序映射)没有显式比较行为表现“怪异”,当它们与元素(或键),它的自然排序与equals不一致使用。尤其是,这样的有序集合(或有序映射表)违背了集(或地图),这是在equals方法定义的一般合同。
例如,如果加上两个键a和b,使得(!a.equals(二)
事实上,实现可比所有Java核心类的自然排序是与equals一致。java.math.BigDecimal是个例外,它的自然排序相当于BigDecimal对象具有相同的价值观和不同的精度(比如4.0和4.00)。 对于数学上的倾斜,即限定在一个给定的类C中的自然排序的关系是:
{(x, y) such that x.compareTo(y) <= 0}.
这个顺序的商:
{(x, y) such that x.compareTo(y) == 0}.
它从compareTo的协定,商是C的等价关系紧跟,那自然排序是C的整体排序。当我们说类的自然排序与equals一致的,我们是指商数为自然顺序是由类的equals(Object)方法定义的等价关系:
{(x, y) such that x.equals(y)}. 
此类是Java Collection Framework中的一员
 
参数:<T>
父类:
子类: Delayed Name Path RunnableScheduledFuture <V>,  ScheduledFuture <V>
接口:
方法


method: int compareTo(T o)
use:拿这个对象与指定对象相比排序。负整数,零或正整数,来确认此对象比指定对象小于,等于,或更大。
此接口的实现必须保证sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) 对所有的x和y。(这意味着 x.compareTo(y)必须抛异常如果y.compareTo(x)抛出了异常)
接口实现者必须保证关系的传递性:(x.compareTo(y)>0 && y.compareTo(z)>0)意味着x.compareTo(z)>0.
最后,接口实现者保证如果 x.compareTo(y)==0 意味着对所有的z,满足 sgn(x.compareTo(z)) == sgn(y.compareTo(z))。
强烈建议,但是不是严格要求必须满足 (x.compareTo(y)==0) == (x.equals(y)).通常的讲,任何实现comparable接口并且违法这个条件必须明确指出此事实。推荐的语言:Note,此类有自然的排序但是不满足equals.
上文所说的sgn 是数学中的符号函数,返回一个整型变量,指出参数的正负号。语法Sgn(number), number 参数是任何有效的数值表达式。返回值如果数字大于0,则Sgn 返回1,数字等于0,则返回0,数字小于0,则返回-1,数字参数的符号决定了Sgn 函数的返回值。
specifiedBy:
overrides:
param:o 要比较的对象
return:负整数,零或正整数,来确认此对象比指定对象小于,等于,或更大。
exception:
 throw NullPointerException 如果指定对象为null
 throw ClassCastException  如果指定对象的类型不允许与这个对象相比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mingjie1212

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值