一、类
1.1 类修饰符
A. 是一个接口,这个接口对实现它的每个类的对象施加了一个总的顺序。这种排序称为类的自然排序,类的CompareTo方法称为类的自然比较方法;
B. 实现此接口的对象List(和数组)可以按Collections.sort(和Array.sort)自动排序。实现此接口的对象可以用作已排序映射中的键或已排序集中的元素,而无需指定比较器;
C. 对于类C的每个e1和e2: 当且仅当e1.CompareTo(e2)==0的布尔值与e1.Equals(e2)的布尔值相同时,类C的自然顺序才被称为与equals一致。请注意,空值不是任何类的实例,并且e.CompareTo(null)应引发NullPointerException,即使e.Equals(null)返回false;
D. 强烈建议(尽管不是必需的)自然顺序与equals一致。这是因为没有显式比较器的sorted sets或sorted maps 的元素或键在自然顺序与equqls不一致的时候会表现出“奇怪”的行为。特别是,这样的sorted sets或sorted maps违反了集合(或映射)的一般约定,集合(或映射)是根据equals方法定义的; 例如,如果一个添加了两个键a和b,那么(!对于不使用显式比较器的排序集,!a.equals(b)&&a.compareto(b)==0,第二个加法操作返回false(排序集的大小不会增加),因为从排序集的角度来看,a和b是等效的。
E. 实际上,实现可比较的所有Java核心类都具有与平等一致的自然顺序。一个例外是java.math.bigdecimal,它的自然排序将bigdecimal对象等同于具有相同值和不同精度的对象(如4.0和4.00)。
1.2 类结构图
二、字段
1.1 字段列表
无。
三、方法
3.1 方法列表
注:如上图,共有1个方法。
绿色打开的锁代表是public, 红色关闭的代表是private, 灰色的钥匙代表的protected。
3.2 方法修饰符
3.3 方法详解
3.3.0 [静态]代码块
无。
3.3.1 compareTo(T o)
A. 将此对象与指定的顺序对象进行比较。返回负整数、零或正整数,因为此对象小于、等于或大于指定对象;
B. 实现者必须确保所有x和y的sgn(x.compareto(y))=-sgn(y.compareto(x))。(这意味着x.compareto(y)必须引发异常,如果y.compareto(x)引发异常。);
C. 实现者还必须确保关系是可传递的:(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));
D. 强烈建议,但不严格要求(x.compareto(y)==0)==(x.equals(y))。一般来说,任何实现可比较接口并违反此条件的类都应该清楚地表明这一事实。建议使用的语言是“注意:此类具有与等于不一致的自然顺序。”;
注: 在前面的描述中,符号sgn(expression)指定数学符号函数,根据表达式的值是负、零还是正,定义为返回-1、0或1中的一个;
四. JDK8源码阅读系列链接
- JDK8源码阅读(一) java.util.Object
- JDK8源码阅读(二) java.util.Objects
- JDK8源码阅读(三) java.io.Serializable
- JDK8源码阅读(四) java.lang.Comparable
- JDK8源码阅读(五) java.lang.CharSequence
- JDK8源码阅读(六) java.lang.String
注: 今年要把JDK的一些基本的类的源码整理出来,欢迎大家指正和讨论。
如果有错误的地方,欢迎各位老师指正。
如果您觉得还不错,点个赞的话 我会很感激的,谢谢~
转载请注明链接来源即可。