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

智能推荐

如何用javascript操作本地文件(读写txt文件) _ts读取本地txt-程序员宅基地

文章浏览阅读1.8w次。版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://pp99nn.blogbus.com/logs/46943583.htmljavascript在浏览器本地和与服务器通讯方面都有优异的表现。使用javascript对本地文件进行操作实际上是有一点技术后退的感觉。毕竟桌面应用程序微软的、java的已经相当成熟了。不过用javascript做点小程序来处理本地事务,在没有java或者MFC开发环境的时候还是很方便的。_ts读取本地txt

数字图像处理第三版(冈萨雷斯)——第二章数字图像基础_数字图像处理电子书-程序员宅基地

文章浏览阅读2k次,点赞3次,收藏9次。数字图像处理(冈萨雷斯)——第二章数字图像基础一、视觉感知要素1.1人眼的结构1.2亮度适应和辨别二、光和电磁波谱三、图像感知和获取四、图像取样和量化五、像素间的一些基本关系六、数字图像处理所用数学工具介绍一、视觉感知要素虽然数字图像处理这一领域建立在数学和概率公式表示的基础上,但人的直觉和分析在选择一种技术而不选择另一种技术时会起核心作用,这种选择通常是基于主观的视觉判断做出的。1.1人眼的结构人眼分辨细节的能力与当前电子传感器是可以类比的眼睛由三层膜包裹:角膜与巩膜外壳、脉络膜和视网膜。_数字图像处理电子书

classdump-dyld / iphoneheaders / iOS7.0.3 / System / Library / Internet Plug-Ins / QuickTime Plugin._classdumpdyld-程序员宅基地

文章浏览阅读2.4k次。https://github.com/limneos/classdump-dyld/blob/master/iphoneheaders/iOS7.0.3/System/Library/Internet%20Plug-Ins/QuickTime%20Plugin.webplugin/FigPluginView.h_classdumpdyld

matlab2014启动很慢,matlab启动慢的解决方法-程序员宅基地

文章浏览阅读203次。常用方法见文中高亮部分Matlab随着版本的升级体积越来越大,带来的问题就是启动速度也越来越慢,下面就我注意到的几个影响MATLAB启动速度的问题集中和大家分析下解决办法。一、preferences方面原因问题产生原因:大家都知道,preferences参数很多,如果首选参数设置的不得当,或者文件太大,Matlab启动的时候加载preferences设置就需要较长时间问题解决方法:以管理员权限登录..._matlab2014a 运行后 started

redis 登录客户端命令_redis登录命令-程序员宅基地

文章浏览阅读6.9k次,点赞5次,收藏8次。Redis 命令用于在 redis 服务上执行操作。要在 redis 服务上执行命令需要一个 redis 客户端。Redis 客户端在我们之前下载的的 redis 的安装包中。_redis登录命令

Android 蓝牙开发-蓝牙通信_手机蓝牙与bt04通讯-程序员宅基地

文章浏览阅读403次。1 蓝牙基本操作随着可穿戴设备的流行,研究蓝牙是必不可少的一门技术了。总结了下蓝牙开发使用的一些东西分享一下。蓝牙权限首先需要AndroidManifest.xml文件中添加操作蓝牙的权限。Android.permission.BLUETOOTH" />允许程序连接到已配对的蓝牙设备。android.permission.BLUETOOTH_ADMIN"_手机蓝牙与bt04通讯

随便推点

文本挖掘入门-程序员宅基地

文章浏览阅读1.1k次,点赞4次,收藏23次。总之,词嵌入是一种有助于RNN模型理解文本语义的技术,而RNN则用于在文本生成任务中考虑文本的顺序和上下文信息,从而生成连贯的文本。文本挖掘是从文本数据中提取有用信息的过程,通常包括文本预处理、特征提取和建模等步骤。:选择合适的机器学习或深度学习算法,根据任务类型进行建模,例如文本分类、情感分析、主题建模等。:使用标注好的数据集训练模型,并使用评估指标(如准确度、F1分数、均方误差等)来评估模型性能。函数将使用RNN模型生成文本,它会根据先前生成的文本以及上下文信息来预测下一个单词。_文本挖掘

oracle 表空间和数据文件管理 移动数据文件 重命名数据文件 数据文件重命名_如何使用oracle创建表空间,数据文件命名为-程序员宅基地

文章浏览阅读2.7k次。oracle 11g2 一个数据文件在同一个时刻仅属于同一个表空间,仅属于同一个数据库。TEMP文件是一类在临时表空间中被使用的特殊数据文件。 当数据库创建或重用i一个数据文件——操作系统文件被重用和初始化——被一个规则的二进制零所填充。这些初始化不会发生在临时文_如何使用oracle创建表空间,数据文件命名为

语法篇-JSON基础_json语法-程序员宅基地

文章浏览阅读2.4k次,点赞3次,收藏14次。script>name : '烟雨平生',age : 20,sex : "男"_json语法

python编辑视频教程_Maya中Python编辑基础核心技术训练视频教程-程序员宅基地

文章浏览阅读140次。本教程是关于Maya中Python编辑基础核心技术训练视频教程,时长:超过20小时,大小:3.1 GB,MP4高清视频格式,教程使用软件:Maya,附源文件,作者:Geordie Martinez,共8个章节,语言:英语。分享Autodesk Maya是美国Autodesk公司出品的世界顶级的三维动画软件,应用对象是专业的影视广告,角色动画,电影特技等。Maya功能完善,工作灵活,易学易用,制作效..._learn python inside maya

hcip3_interface tunnel1-程序员宅基地

文章浏览阅读111次。要求:1.R4为ISP,其上只能配置IP地址,R4与其他所有直连设备间使用公有IP;解决ospf不规则区域的3种方式都得使用.2.整个osPF环境p地址为172.16.0.0/16进程1oo使用192.168.1.0/243.所有设备均可访问R4的环回r14上有两个环回减少LsA的更新量,加快收敛,保障更新安全4.全网可达解决不规则区域的三种方式1.Tunnel在两台ABR上创建tunnel,然后将其宣告到OSPF协议中;缺点:1、选路不佳 2、周期hello和更新均对中间区域进行影响._interface tunnel1

ESP32系列区别—ESP32-WROOM-32和ESP32-WROOM-32E和ESP32-WROOM-32U的区别_esp32wroom32d和32e区别-程序员宅基地

文章浏览阅读1.8w次,点赞3次,收藏14次。简单来说就是32E和32U是32的升级版本,具有更高的稳定性具体的区别建议官网查看:模组概览 | 乐鑫科技最近有新项目要用到32E,要去某宝购买回来练练手,但是发现有芯片和开发板,开发板更适合新手和软件开发者,但是再一看有搭载32的开发板,3u的开发板,一脸懵,百度了区别但是广告更多,还是决定看官网,对比可以看到32E是32U和32的升级版本,具有更高的稳定性安全性。所以还是选32E的吧,虽然贵的/>_</受不了,上传的图片被压缩了,大家还是官网看把..._esp32wroom32d和32e区别