java接口Comparable和Comparator源码分析

目录

Comparable

简介

compareTo

Comparator

简介

compare

equals

reversed

thenComparing


Comparable

简介

/**
 *
 * <p>这个接口强制每个实现它的类的对象排序。这个排序被称为类的自然排序,
 * 而且这个类的compareTo方法被称为它的自然排序方法。
 * 
 * <p>实现这个接口的对象的列表和数组能被自动排序,通过Collections.sort和Arrays.sort.
 * 实现这个接口的对象能够不需要指定一个Comparator,就能被用作SortedMap的key或者SortedSet的元素,
 * 
 * <p>对一个类C的自然排序被认为与equals方法一致,当且仅当:
 * 对于类C的每个对象e1和e2,e1.compareTo(e2) == 0和e1.equals(e2)有相同的结果。
 * 注意:null不是任何类的实例,并且e.compareTo(null)应该抛出一个NullPointerException,
 * 即使e.equals(null)返回false
 * 
 * <p>强烈建议(尽管不要求)自然排序与equals方法一致。
 * 这是因为没有显示的comparator的sorted set和sorted map在它们与
 * 自然排序与equals不一致的元素或者key,一起使用时,会显得很奇怪。
 * 尤其是,这样的sorted set和sorted map违反了set和map的通用约定,
 * 这个约定是根据equals方法定义的。
 * (因为map和set约定里面的key和元素根据equals是唯一的,
 * 但是sorted set和sorted map是根据compareTo方法定位的,而不是equals,
 * 所以如果不一致,会出现equals相同,但是同时出现的元素或者key)
 * 
 * <p>举个例子,如果向一个没有使用显示的comparator的sorted set添加两个元素a,b,
 * 并且  !a.equals(b) && a.compareTo(b) == 0(即equals不相同,compareTo相同),
 * 第二次添加会返回false(并且sorted set的大小不变),因为在sorted set的观点来看,a和b相同。
 * 
 * <p>事实上所有实现comparable接口的java核心类的自然排序都和equals方法一致。
 * 一个例外是java.math.BigDecimal,它的自然排序认为
 * 有着相同的值和不同的精度(例如4.0和4.00)是相同的,而它的equals方法认为两者不同。
 * 
 * <p>对于数学上小于的的,一个给定的类C定义的自然顺序的关系是:
 *    x.compareTo(y)<= 0
 * 整个的排序相同的关系是:
 *    x.compareTo(y) == 0
 * 
 * @param <T> 这个对象可能被比较的对象的类
 *
 * @author  Josh Bloch
 * @see java.util.Comparator
 * @since 1.2
 */
public interface Comparable<T> 

compareTo

它里面只有这个方法

   /**
     * 
  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值