Java学习(92)Java集合排序——关于compareTo()方法、Comparable和Comparator的区别-程序员宅基地

技术标签: Java  java  

Java集合排序——关于compareTo方法、Comparable和Comparator的区别

关于compareTo()方法

在学习Comparable接口时,我们用到了compareTo()方法,用于对对象属性进行比较,根据返回结果进行排序。那么基本数据类型的包装类和字符串也都有compareTo()方法,下面分别来看一下:


  1. 基本数据类型以Integer为例,来看一下Integer类的compareTo()方法
    public int compareTo(Integer anotherInteger)
    这里的compareTo()方法的参数是要比较的Integer对象
    对于返回值,如果调用compareTo()方法的对象等于参数,则返回0;如果大于参数,则返回一个大于0的值;如果小于参数,则返回一个小于0的值。
    案例代码和运行效果如下,可以看到相等时返回0,大于参数时返回值1,小于参数时返回-1。


运行结果:


  1. String的compareTo()方法
    public int compareTo(String anotherString)
    这个方法是按字典顺序比较两个字符串,比较的是字符串中每个字符的unicode值。
    对于返回值,如果两个字符串相等,则返回值为0;如果字符串对象比参数小,则返回一个小于0的数;如果字符串对象比参数大,则返回一个大于0的数。
    案例代码和运行效果如下:


运行结果:


相等的情况比较简单,返回的结果是0。对于小于和大于的情况,可以看到返回结果不都是-1和1,而是不同的值。这是它们之间的比较时,unicode值进行减法运算的结果。比如abc和bcd进行比较,a比b的unicode值小1,所以结果为-1。而abc与cde比较,a比c的值小2,所以返回值为-2。大于的情况也是如此进行比较的。

Comparable和Comparator的区别

前面我们已经学习过Comparator和Comparable接口的使用,下面来总结一下二者的区别。

  1. Comparator接口位于java.util包下,而Comparable接口位于kava.lang包下。
  2. 对于Comparator接口,可以看到它的compare()方法的参数时两个对象,比如我们对Cat类进行比较,那么这里就是两个要比较的Cat类的对象,所以可以有一个单独的类实现Comparator。


对于Comparable接口,它的方法只有一个对象作为参数,所以要比较的类需要实现Comparable接口,将当前对象与方法参数中的对象进行比较。


因此,如果使用Comparator接口,那么要比较的类和实现Comparator接口的类可以分开;如果使用Comparable接口,那么要比较的类就要实现Comparable接口才可以。
3. 关于应用场景
一般情况下如果对某个类进行排序,比如Cat类,如果使用Comparable接口的方式,那么Cat类需要实现Comparable接口。如果Cat类通过Comparable接口的方式实现排序,比如通过name排序了。那么我们还希望通过age进行排序,这时不希望修改Cat类,那此时就需要使用Comparator接口了。
因此,Comparable接口可以作为实现类的默认排序算法,Comparator接口则用于一个类的扩展排序。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43360025/article/details/128698692

智能推荐

pandas如何在一个Excel文件中写入多个sheet页_pandas怎么将数据写入多个sheet-程序员宅基地

文章浏览阅读6.9k次。要实现这个功能,需要借助于pandas的ExcelWriter()方法,参考如下:from impala.util import as_pandas# 把数据库中表字段写入到Excel文件中便于查看curs.execute("""describe ods.table1""")media = as_pandas(curs)curs.execute("""describe ods.tab..._pandas怎么将数据写入多个sheet

Velocity原理探究-程序员宅基地

文章浏览阅读1.2k次。 一、前言常见的Java模板引擎有JSP、Freemark,Velocity。在MVC三层框架中,模板引擎属于view层,实质是把model层内容展现到前台页面的一个引擎,velocity以其前后端解耦使前后台可以同时开发和其语法的简易性得到了广泛的应用,集团WebX框架就建议使用它作为模板引擎。二、原理2.1 架构介绍打开velocity的源码包,从代码结构看velocity主要包括app、co..._velocity原理

【网页全屏截图问题总结】_网页 full 截图不好使-程序员宅基地

文章浏览阅读1.3k次。网页全屏截取问题总结问题:因使用QT实现网页全屏截取的过程中时,截取出来的图片只有首页正常,底部是空白,没有截取到,目前在官网上也没有找到合理的解释。解决方案:博主通过测试发现,使用QT的版本为QT 5.12.9这个版本是正常的;其它版本如QT 5.12.1,QT 5.12.11截取的图片都存在问题。**特别注意:**1、QT5.10以上版本才引入QWebEngineSettings::ShowScrollBars;2、博主使用QT 5.12.1和QT 5.12.11测试发现,这两个版本都不能正常全屏截图,_网页 full 截图不好使

天津计算机考研901,2017年天津大学计算机科学与技术学院901数据结构与程序设计考研题库...-程序员宅基地

文章浏览阅读467次。一、填空题1. 设有两个算法在同一机器上运行,其执行时闻分别为_____。【答案】15【解析】当时,而,时,2. 阅读下列程序,指出其功能,并写出空格处应填上的语句。【答案】要使前者快于后者,n 至少为【解析】本题是在哈希表ht[]中插入值为的元素,如该元素已在哈希表中,报告出错。3. 设正文串长度为n ,模式串长度为m ,则串匹配的KMP 算法的时间复杂度为_____。【答案】4. 按LSD 进..._设有两个算法在同一机器上运行

opencv二值图像、灰度图像、彩色图像的基本表示方法_二值图像图片-程序员宅基地

文章浏览阅读2.8k次。1.二值图像 计算机将白色像素点(白色小方块区域)处理为“1”,将黑色像素点(黑色小方块区域)处理为“0”2.灰度图像二值图像表示起来简单方便,但是因为其仅有黑白两种颜色,所表示的图像不够细腻。如果想要表现更多的细节,就需要使用更多的颜色。例如,lena图像是一幅灰度图像,它采用了更多的数值以体现不同的颜色,因此该图像的细节信息更丰富。通常,计算机会将灰度处理为256个灰度..._二值图像图片

5个超厉害的资源搜索网站,每一款都可以让你的资源满满!_最全资源搜索引擎-程序员宅基地

文章浏览阅读1.6w次,点赞8次,收藏41次。生活中我们无时不刻不都要在网站搜索资源,但就是缺少一个趁手的资源搜索网站,如果有一个比较好的资源搜索网站可以帮助我们节省一大半时间!今天小编在这里为大家分享5款超厉害的资源搜索网站,每一款都可以让你的资源丰富精彩!网盘传奇一款最有效的网盘资源搜索网站你还在为找网站里面的资源而烦恼找不到什么合适的工具而烦恼吗?这款网站传奇网站汇聚了4853w个资源,并且它每一天都会持续更新资源;..._最全资源搜索引擎

随便推点

type-c转type A 3.0线以及otg线序_typec线序-程序员宅基地

文章浏览阅读1.4w次,点赞7次,收藏71次。注意:type-c线缆的D+、D-只接了一组,如果想支持正反插识别,需要在PCB座子侧把A7、B7以及A6、B6连接到一起。_typec线序

软件测试周刊(第13期):质量是一种认知_conan流量回放-程序员宅基地

文章浏览阅读656次。这里记录过去一周我们看到的软件测试及周边的行业动态,周五发布。本周刊开源(GitHub: SoftwareTestingWeekly ),欢迎提交 issue,投稿或推荐软件测试相关的内容。科普愚人节昨天是愚人节,朋友圈流传着一句话:成年人的世界里没有愚人节,只有 Q2。一语中的,直击灵魂。啥是 Q2?其实就是英文 Quarter2,通常指一年的第二个季度。人们常把一年平均分成四份,按照春、夏、秋、冬的顺序分为四个季度,也就是 Q1、Q2、Q3、Q4。『..._conan流量回放

python opencv图像对比度增强,用python(cv2)中的OpenCV增加彩色图像对比度的最快方法是什么?...-程序员宅基地

文章浏览阅读593次。I'm using OpenCV to process some images, and one of the first steps I need to perform is increasing the image contrast on a color image. The fastest method I've found so far uses this code (where np ..._cv2 增加对比度

[IDEA] chapter_reader - idea看小说阅读插件 - idea摸鱼插件_idea看小说插件-程序员宅基地

文章浏览阅读6.6w次,点赞64次,收藏109次。chapter_reader IDEA 在线&本地小说阅读摸鱼插件_idea看小说插件

自学编程需要注意什么?_自学编程哪些注意-程序员宅基地

文章浏览阅读9.8k次,点赞260次,收藏442次。前几天在知乎上看到这么一个问题,一位在读学生,自己非常想自学编程,但是很怕走一些弯路,于是提问「自学编程需要注意什么?」,我看了一圈回答,看起来都不是自学过来的,很多回答抓不到重点。我的读者都知道,我是非科班 0 基础自学过来的,我很清楚一个人自学编程有哪些误区,有哪些需要注意的地方,以及哪些可以提升效率的地方,所以,我从我的自学经历给一些自学编程的后来者总结了一些建议,希望给正在自学编程或者打算走_自学编程哪些注意

21.等值线图(Counter Plot)、Contour Demo、Creating a “meshgrid”、Calculation of the Values、等_counter图-程序员宅基地

文章浏览阅读1.9k次。21.等值线图(Counter Plot)21.1.Contour Demo21.2.Creating a “meshgrid”21.3.Calculation of the Values21.4.Changing the Colours and the Line Style21.5.Filled Contours21.6.Individual Colours21.等值线图(Counter Plot)两个变量函数的等值线(或等高线)是函数具有常数值的曲线。它是平行于x,y平面的函数f(x,y_counter图