【JAVA基础知识】——Comparable自然排序学习

阅读之前看这里👉:博主是一名与大家共同学习的学生,博客记录的是在学习过程中一些总结,也希望和大家一起进步,在记录之时,未免存在很多疏漏和不全,如有问题,还请私聊博主指正。
博客地址:天阑之蓝的博客,学习过程中不免有困难和迷茫,希望大家都能在这学习的过程中肯定自己,超越自己,最终创造自己。

1.Comparable定义

Interface Comparable<T>

参数类型 : T—该对象可以与之进行比较的对象的类型 。

  • 此接口对实现该接口的每个类的对象强加了总体排序。 该排序称为类的自然排序 ,而该类的compareTo方法被称为其自然比较方法
  • 可以通过Collections.sort (和Arrays.sort )自动对实现此接口的对象的列表(和数组)进行排序。实现该接口的对象,可以使用如在键sorted map或作为在元件sorted set ,而不需要指定一个comparator 。
  • 当且仅当 e1.compareTo(e2) == 0 ,对于类 C 的每个 e1 和 e2 具有与 e1.equals(e2) 相同的布尔值时,才说类 C 的自然顺序与 equals 一致。请注意, null 不是任何类的实例,即 e.equals(null) 返回 false,e.compareTo(null) 也应该抛出 NullPointerException。
  • 强烈建议(虽然不是必需的)自然顺序与 equals 一致。之所以如此,是因为没有显式比较器的排序集(和排序映射)在与自然顺序与 equals 不一致的元素(或键)一起使用时表现得“奇怪”。特别是,这样的排序集合(或排序映射)违反了集合(或映射)的一般契约,它是根据 equals 方法定义的。
  • 例如,如果将两个键 a 和 b 相加使得 (!a.equals(b) && a.compareTo(b) == 0)到一个不使用显式比较器的有序集合,则第二个加法操作返回 false (并且排序集的大小不会增加)因为从排序集的角度来看 a 和 b
    是等效的。

  • 几乎所有实现 Comparable 的 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)}.。

2.Comparable的实例学习

说明:TreeSet调用集合元素的compareTo方法来比较元素的大小关系,然后将集合元素按照升序排列(从小到大,BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Short 是按数字大小排序。Character 按字符的Unicode值的数字大小排序。String 按字符串中字符的Unicode值排序)。

要求TreeSet集合中的元素实现Comparable接口。在compareTo方法中编写

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值