ava提供了只包含一个compareTo()方法的Comparable接口。这个方法可以个给两个对象排序。具体来说,它返回负数,0,正数来表明已经存在的对象小于,等于,大于输入对象。
Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator相等。只有当输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相同的时候,这个方法才返回true。
Comparable & Comparator 都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。 Comparator位于包java.util下,而Comparable位于包 java.lang下 Comparable 是一个对象本身就已经支持自比较所需要实现的接口(如 String、Integer 自己就可以完成比较大小操作,已经实现了Comparable接口) 自定义的类要在加入list容器中后能够排序,可以实现Comparable接口,在用Collections类的sort方法排序时,如果不指定Comparator,那么就以自然顺序排序, 这里的自然顺序就是实现Comparable接口设定的排序方式。 而 Comparator 是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。 可以说一个是自已完成比较,一个是外部程序实现比较的差别而已。 用 Comparator 是策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为。 比如:你想对整数采用绝对值大小来排序,Integer 是不符合要求的,你不需要去修改 Integer 类(实际上你也不能这么做)去改变它的排序行为,只要使用一个实现了 Comparator 接口的对象来实现控制它的排序就行了。

两种方式,各有各的特点:使用Comparable方式比较时,我们将比较的规则写入了比较的类型中,其特点是高内聚。但如果哪天这个规则需要修改,那么我们必须修改这个类型的源代码。如果使用Comparator方式比较,那么我们不需要修改比较的类,其特点是易维护,但需要自定义一个比较器,后续比较规则的修改,仅仅是改这个比较器中的代码即可。

转载于:https://www.cnblogs.com/yonyong/p/9323829.html

Comparable和Comparator接口是干什么的?列出它们的区别。相关推荐

  1. Comparable和Comparator接口时干什么的?列出它们的区别

    一.对Comparable 的解释 Comparable是一个排序接口 此接口给实现类提供了一个排序的方法,此接口有且只有一个方法 public int compareTo(T o); compare ...

  2. Java中Comparable和Comparator接口区别分析

    本文要来详细分析一下Java中Comparable和Comparator接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧. Comparable 简介 Comp ...

  3. java comparator相等_详解Java中Comparable和Comparator接口的区别

    详解Java中Comparable和Comparator接口的区别 发布于 2020-7-20| 复制链接 摘记: 详解Java中Comparable和Comparator接口的区别本文要来详细分析一 ...

  4. Comparable和Comparator接口

    目录 Comparable接口 Comparator接口(比较器) Comparable接口和Comparator的比较 总结 Comparable接口 作用:实现对引用数据类型的比较和排序 使用:待 ...

  5. java compareable接口_Java对象比较-Comparable和Comparator接口使用

    最近在学习贪心算法和动态规划的过程中,里面有一段自然排序的操作,顺便简单了解一下Java中对象比较后排序要使用的两个接口:Comparable和Comparator.如果是数字,直接比较就行,但是如果 ...

  6. 使用Comparable、Comparator接口实现对对象数组、List集合自定义排序

    1.实现对象数组排序 (1)方法一,需要排序的对象所属的类实现Comparable接口,复写 comparaTo方法  (2)方法二,需要排序的对象所属的类已经完成无法实现Comparable接口,这 ...

  7. Java中Comparable和Comparator接口的区别

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/u010859650/article/details/85009595 Comparable 简介 Comparable 是排序 ...

  8. 比较器(Comparable与Comparator接口)

    有错之处,希望大家可以指出来,谢谢. 文章目录 概念 Comparable接口 Comparable接口实现注意:接口的实现位置要在类所在的位置,比如此类是Worker类那么Comparable接口要 ...

  9. 【Java】Comparable和Comparator接口

    活动地址:CSDN21天学习挑战赛 ✨博客主页: XIN-XIANG荣 ✨系列专栏:[Java SE] ✨一句短话: 难在坚持,贵在坚持,成在坚持! 文章目录 一. Comparable接口 1. C ...

最新文章

  1. YOLO3升级优化版!Poly-YOLO:支持实例分割!
  2. GO语言Windows下Liteide
  3. master-worker常驻型程序代码修改哪些需要重启master或者worker
  4. TCP/IP总结(1)分层
  5. 开关电源闭环控制原理_stepbystep,电路设计全过程(含原理图)
  6. 【Linux 内核网络协议栈源码剖析】网络栈主要结构介绍(socket、sock、sk_buff,etc)...
  7. paip.提升用户体验-----可访问性大原则及一些方法
  8. 在计算机内部除顶点,吉林大学材料加工CADCAM基础第章_计算机辅助设计基础课件.ppt...
  9. 微信小程序地图定位当前位置
  10. Android 国内阿里云镜像
  11. 【漏洞复现】海洋CMS6.28远程代码执行
  12. 单片机全局变量 局部变量 堆与栈
  13. 解决winrar压缩文件或文件夹时,文件拒绝访问问题
  14. 【手拉手 带你准备电赛】解答小课堂——为什么要使能时钟
  15. rs.next()为false导致resultset遍历不出数据
  16. 【MySQL】创建数据表
  17. WGCNA如何从module中挖掘关键基因
  18. 深度学习网络不收敛的原因分析总结
  19. Chrome源代码结构
  20. 西瓜视频这20亿,砸的是什么?

热门文章

  1. python自动化测试环境搭建_(一)Python+Appium自动化测试环境搭建
  2. 未来科技计算机作文600字,未来科技发展_600字
  3. shift用计算机,电脑Shift键的妙用,你都了解吗?
  4. 基于用户滚动应用CSS
  5. 内部排序比较(Java版)
  6. 如何编写一个d.ts文件
  7. CentOS下yum安装mcrypt错误:No package php-mcrypt available.解决方法
  8. CSS选择器(中)——高级选择器
  9. 禁止迅雷:迅雷服务器地址大全+ISA计算机集(xml)
  10. StarWind RAM 磁盘仿真程序