Comparator接口的使用

本文详细介绍了Java中的Comparator接口,包括其作用、使用场景、常用方法及其详细规则。Comparator接口用于实现自定义排序,常见于数组和集合的排序操作。文章强调了compare方法的重要性,以及返回值的含义,同时提供了升序和降序的实现示例。
摘要由CSDN通过智能技术生成

1.Comparator接口的使用

今天学习了java.utils包下的Comparator接口。该接口代表一个比较器。 提到比较的接口, 你一定会想起来Comparable。这个俩个接口都有比较的作用。


提到了comparable接口, 就要介绍一下这两个接口的区别。

从字面意思区别这个俩个接口的话, 如下:

  • comparator 翻译过来是比较**器 **, 即比较的器具,工具。
  • comparable 翻译过来是可比的, 是一个修饰词, 修饰词就是修饰事物的, 即使某个物具有可比性。

这样,你大体对这两个接口的使用方法和区别有了初步的了解。

1.1.该接口的作用

我们回到我们的Comparator ,该接口代表一个比较器。java数组工具类和集合工具类中提供sort方法的排序就是使用该接口来处理的。

Arrays.sort(T[],Comparator<? super T> c);  #数组工具类sort
Collections.sort(List<T> list,Comparator<? super T> c); #集合工具类sort

1.2.使用场景

通常用到比较的地方就是 **排序 **, 排序一般比较的是=

此外, 还有些地方比较的是=或者!=

1.3.接口常用的方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zih5Wpen-1593010989509)(D:\笔记图片集\1593008838383.png)]

compare、 和equals 是用俩个常用方法, 因此实现该接口, 一般就重写这两个方法。

其中compare是比较参数顺序, 就是在排序时使用的。

equals是我们上面说到的比较是否想等。

1.4. 常用方法详细介绍

1.4.1.遵守的规则

我这里只介绍compare方法, 这个方法是用来比较俩个参数的顺序的。文档给出的介绍如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9Fr5OIMV-1593010989511)(D:\笔记图片集\1593009048697.png)]

文档中提到了实现compare必须要遵守三个性质:

  • 相反性: sgn(compare(x, y)) == -sgn(compare(y, x))所有xy。我们这里称呼这个为相反性吧,这个形式很好理解

  • 传递性:实施者还必须确保关系是可传递的: ((compare(x, y)>0) && (compare(y, z)>0))意味着compare(x, z)>0

  • 最后就是对compare(x, y)==0的解释: 如果他们x y满足compare(x, y)==0, 他们俩与任意一个z 的比较结果想等。

这是官方提出要遵守的几条规则, 所以我们在编写时注意遵守一下就是了。

注意:以上的相反性是我个人为了便于理解, 而对它的称呼。

1.4.2.返回值

上面我呢介绍了编写该方法索要遵守的规则, 下面我们提一下返回值。

该方法返回值为int ,分三种:

  • 正数
  • 0
  • 负数

因为排序有多种, 并不是返回什么值就要交换, 它只是定义了一个升降的规则。升序和降序的实现, 如下。

1.5. 升序和降序的实现

  • 升序

     public int compare(T u1, T u2) {
         
         if(u1 > u2) return 1;
         if(u1 < u2) return -1
  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值