集合中的两个比较器Comparable和Comparator接口

本文来自 Taking_fish 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u014133299/article/details/78608454?utm_source=copy


简介

Comparable接口

该接口对每个实现它的类的对象强加了排序规则。该排序称之为自然排序(natural ordering)。方法public int compareTo(T o)是自然排序的排序方法。

实现了comparable接口类的List或者arrays对象可以通过调用以下方法进行排序:

1. Collections#sort(List<T> list) //内部是调用第二个方法进行排序
2.  Arrays#sort(Object[] a)       //算法是合并排序或二分排序 n^2算法复杂度

//此外,可以通过将元素添加到一下集合或Map中实现排序
3. SortedMap tm = new TreeMap();
4. SortedSet ts = new TreeSet();

自然排序中,e1.compareTo(e2) == 0的布尔值应该等价于e1.equals(e2)。注意null不属于任何类的实例,故e.compareTo(null)应抛出空指针异常,尽管此时e.equals(null)为false。

实际上,所有实现comparable的类中方法compareTo和equals方法值是等价的。一个特例就是java.math.BigDecimal。

Comparator接口

通过比较两个入参得到顺序。返回值有三种:

1,入参一大于入参二。
0,入参相同。
-1,入参一小于入参二。
实现的类必须保证以下 要求:

sgn(compare(x, y)) == -sgn(compare(y, x))。暗示着compare(x, y)抛异常,则compare(y,x)也抛异常。
((compare(x, y) < 0),((compare(y,z) < 0)暗示着((compare(x,z) < 0)。
compare(x, y)==0暗示着sgn(compare(x, z))==sgn(compare(y, z))。
参数ComparableComparator
排序逻辑排序逻辑必须在待排序对象的类中,故称之为自然排序排序逻辑在另一个实现
实现实现Comparable接口实现Comparator接口
排序方法int compareTo(Object o1)int compare(Object o1,Object o2)
触发排序Collections.sort(List)Collections.sort(List, Comparator)
接口所在包java.lang.Comparablejava.util.Comparator
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值