当前位置: 首页 > news >正文

【Java】对象比较大小

  • 在Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题。
  • Java实现对象排序的方式有两种:
    • 自然排序:java.lang.Comparable
    • 定制排序:java.util.Comparator
  • 规则:需要我们自定义根据对象的某个或某些属性进行排序

1. 方式一:实现Comparable接口

步骤:

  1. 用我们自定义的类A实现Comparable接口
  2. 重写Comparable接口中的compareTo(Object obj)方法,在此方法中声明类A的对象的大小比较规则

重写compareTo(Object obj)方法示例:和重写equals()方法思路类似

	@Overridepublic int compareTo(Object o) {//1.若实参对象和当前对象地址相同,则时同一个对象if (o == this) {return 0;}//2.若实参对象是当属于当前类或子类实例,则强转,声明比较规则if (o instanceof A) {// 强转A p = (A)o;// 比较规则:用参2与参1比较。小于return 负数,大于return 整数,相等return 0。// 比较规则1,这里注意是谁的compare方法int value = Double.compare(this.xxx,xxx);// 比较规则2if (value != 0) {// 从小到大// return value;// 从大到小return -value;}// 若比较规则1的结果相同,则使用该规则;从从小到大return this.xxx.compareTo(p.xxx);// 从大到小// return -this.xxx.compareTo(p.xxx);}//3.若实参对象不属于当前类,则抛出类型异常throw new RuntimeException("类型不匹配!");// 使用示例// Arrays.sort(arr实现类对象的实例)}

2. 方式二:实现Comparator接口

2.1 为什么有了Comparable还需要Comparator

  • 情况1: 当我们需要对对象进行排序,而对象所在类又没有实现Comparable,我们也没法修改所在类代码的情况下使用。
  • 情况2: 当这个类实现了Comparable接口,但是比较规则不满足我们的需求,而我们又无法修改其源码的时候使用。

因为以上两种情况的存在,我们可以临时的去指定排序方式,于是就有了Comparator。

2.2 实现

步骤:

  1. 在当前类A实现Comparator接口
  2. 重写compare(Object o1, Object o2)方法,在此方法中声明对象的大小比较规则

注意: Comparator的比较规则会覆盖Comparable的比较规则

//1.创建一个实现Comparator接口的实现类对象,这里使用了匿名实现类
Comparator comparator = new Comparator() {@Overridepublic int compare(Object o1, Object o2) {//2.若实参对象是当属于当前类或子类实例,则强转,声明比较规则if(o1 instanceof A && o2 instanceof A){// 强转A p1 = (A) o1;A p2 = (A) o2;// 比较规则:用参2与参1比较。小于return 负数,大于return 整数,相等return 0。// 从小到大return Double.compareTo(p1.getXxx(),p2.getXxx());// 从大到小//return -Double.compareTo(p1.getXxx(),p2.getXxx());}//3.若实参对象不属于当前类,则抛出类型异常throw new RuntimeException("类型不匹配!");// 使用示例// Arrays.sort(arr,comparator类A的实例);}
}

3. Comparable VS Comparator

角度一:

  • 自然排序:单一唯一,一旦指定了比较规则就不能更改
  • 定制排序:灵活多样,创建多个Comparator对象,指定不同的比较规则,调用不同的对象即可

角度二:

  • 自然排序:一劳永逸,一旦声明好就可以永久使用
  • 定制排序:在使用的时候才去零时声明

角度三:

  • 自然排序:实现接口Comparable,重写抽象方法compareTo(Object obj)
  • 定制排序:实现接口Comparator,重写抽象方法compare(Object o1, Object o2)

相关文章:

【Java】对象比较大小

在Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题。Java实现对象排序的方式有两种: 自然排序:java.lang.Comparable定制排序:java.util.Comparator 规则:需要我们自定义根据对象的某个或某些属…...

发票自动OCR识别并录入模板 3分钟免费配置

要问整个公司里和数据打交道最多的职能,非财务莫属了吧。除了每天要处理大量财务数据外,还有发票录入的工作让财务陷入“易燃易爆炸”的工作状态。发票报销看似简单,但发票的类型有很多种,每种发票需要录入的信息也有差别。再加上…...

Dubbo 配置说明

dubbo:scan:base-packages: com.ut.msdasw.services.appservice //这个会扫描该包下得全部接口protocol: //这个主要是配置传输的协议和端口,只是一个协议name: dubbo port: 30032registry: //这里是服务注册中心的地址address: spring-cloud://localhost consum…...

英飞凌TCxxx实战系列01_Alarm处理

目录 1.概述2. Alarm内部处理2.1关联的寄存器2.2 Alarm设置case3. SMU外部处理3.1 关联的寄存器4. WDT Alarm的特殊处理4.1 看门狗超时测试4.2 RecoveryTimer相关的Alarm1.概述 当MCU运行出现问题,如MCU温度过高、过低,看门狗超时等会触发一个Alarm,当SMU收到Alarm信号后,…...

飞桨全量支持业内AI科学计算工具——DeepXDE!

AI技术在跨学科融合创新方面扮演着日益重要的角色,特别是在Al for Science领域,AI技术的发展为跨学科、跨领域的融合创新带来了巨大的机会。AI已成为一个关键的研究工具,改变了基础科学的研究范式。依托AI技术开发的科学计算工具,…...

【c++基础】

C基础入门统一初始化输入输出输入输出符输入字符串const与指针c和c中const的区别const与指针的关系常变量与指针同类型指针赋值的兼容规则引用引用的特点const引用作为形参替换指针其他引用形式引用和指针的区别inline函数缺省参数函数重载判断函数重载的规则名字粉碎C编译时函…...

语音识别技术对比分析

文章目录一、语音识别产品对比二、百度语音识别产品1、套餐及价格:2、官网3、调研结果三、华为语音识别产品四、阿里云语音识别产品1、套餐及价格:2、官网地址3、调研结果五、科大讯飞语音识别产品1、套餐及价格:2、官网3、调研结果六、有道语…...

Idea git 回滚远程仓库版本

目标 回滚远程仓库到特定版本。 将【添加test03】版本回滚到【行为型模式】版本。 回滚前的效果图 步骤 ①复制需要回滚到的版本的版本号 ②右键项目,选择Git-Repository-Reset Head ③Reset Type选择Hard;To Commit填入步骤①复制的版本号&#xff…...

vscode C++配置

program:调试入口文件的地址cwd:程序启动调试的目录miDebuggerPath:调试器的路径launch.json// { // // Use IntelliSense to learn about possible attributes. // // Hover to view descriptions of existing attributes. // /…...

【微电网_储能】基于启发式状态机策略和线性程序策略优化方法的微电网中的储能研究【给定系统约束和定价的情况下】(Matlab代码实现)

👨‍🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…...

rk3288-android8-IR-mouse

IR问题: mouse按键使用不了 然后排查: 1.排查上报 ir_key6{ rockchip,usercode <0xbf00>;rockchip,key_table <0xff KEY_POWER>,<0xfe KEY_MUTE>, <0xfd KEY_1>, <0xfc KEY_2>, <0xfb KEY_3>, <0xfa KEY_4>, <0xf9 KEY_5>…...

2023-03-01干活小计

昨天组会&#xff0c;元气大伤&#xff0c;拖更直接。今天继续&#xff0c;三月加油&#xff01; python魔术方法&#xff1a; __repr__:print()时候调用&#xff0c;注意函数返回值就是打印值。 __len__:len()时候调用 __call__:实例()时候调用 __getitem__:self[i]时候调…...

客户服务软件推荐榜:28款!

在这个竞争激烈的时代&#xff0c;做到服务对企业的存亡有着深刻的意义。改善客户服务&#xff0c;做好客户服务工作&#xff0c;是关键&#xff0c;因为客户服务团队代表着企业的形象&#xff0c;面孔&#xff0c;客户有可能 不大会记得企业的某个东西&#xff0c;但是他们将会…...

Spring注入和注解实现IOC

标题注入依赖注入的方式通过Set方法注入通过构造方法注入自动注入依赖注入的数据类型注入Bean对象注入基本数据类型和字符串注入List注入Set注入Map注入Properties注解实现IOCComponentRepository、Service、Controller注入 依赖注入的方式 在使用依赖注入时&#xff0c;如果…...

Python统计Labelme标注文件信息并绘制散点图

Python统计Labelme标注文件信息并绘制散点图前言前提条件相关介绍实验环境Python统计Labelme标注文件信息并绘制散点图前言 本文是个人使用Python处理文件的电子笔记&#xff0c;由于水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#xff0c;可点击…...

远程接入方案 OpenText Exceed TurboX(ETX) 客户案例——ET Innovations

远程接入方案 OpenText Exceed TurboX&#xff08;ETX) 客户案例——ET Innovations ET Innovations GmbH 助力奥地利各地的医疗保健专业人员提升患者体验 医疗保健信息系统开发商利用 OpenText™ Exceed™ TurboX 将远程访问其软件的稳定性提高了 95% 公司&#xff1a;ET I…...

Django4.1.7通过djongo1.3.6链接mongoDB6.0.4

网上中文版的djongo链接mongoDB基本都是抄袭州的先生大哥的文章。 文章成文比较久&#xff0c;至少是2019年成文的了&#xff0c;有一些情况发生了变化&#xff0c;今天就自己测试的情况做一些记录。 本文成文日期为&#xff1a;2023年3月2日&#xff0c;请注意参考 废话不多说…...

如何使用FindFunc在IDA Pro中寻找包含指定代码模式的函数代码

关于FindFunc FindFunc是一款功能强大的IDA Pro插件&#xff0c;可以帮助广大研究人员轻松查找包含了特定程序集、代码字节模式、特定命名、字符串或符合其他各种约束条件的代码函数。简而言之&#xff0c;FindFunc的主要目的就是在二进制文件中寻找已知函数。 使用规则过滤 …...

【C++】讲的最通透最易懂的关于结构体内存对齐的问题

目录1. 内存对齐规则2. 简单易懂的内存对齐示例2.1 简单结构体2.2 含位域的结构体2.3 空类的大小2.4 嵌套结构体3. 为什么需要内存对齐&#xff1f;4. 类型在不同系统下所占字节数1. 内存对齐规则 第一个成员在与结构体变量偏移量为0的位置处。其他成员变量要对齐到某个数字&a…...

Stochastic Approximation 随机近似方法的详解之(一)

随机近似的定义&#xff1a;它指的是一大类随机迭代算法&#xff0c;用于求根或者优化问题。 Stochastic approximation refers to a broad class of stochastic iterative algorithms solving root finding or optimization problems. temporal-difference algorithms是随机近…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道

文/法律实务观察组 在债务重组领域&#xff0c;专业机构的核心价值不仅在于减轻债务数字&#xff0c;更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明&#xff0c;合法债务优化需同步实现三重平衡&#xff1a; 法律刚性&#xff08;债…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...

跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践

在电商行业蓬勃发展的当下&#xff0c;多平台运营已成为众多商家的必然选择。然而&#xff0c;不同电商平台在商品数据接口方面存在差异&#xff0c;导致商家在跨平台运营时面临诸多挑战&#xff0c;如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...

echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式

pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图&#xff0c;如果边框加在dom上面&#xff0c;pdf-lib导出svg的时候并不会导出边框&#xff0c;所以只能在echarts图上面加边框 grid的边框是在图里…...

js 设置3秒后执行

如何在JavaScript中延迟3秒执行操作 在JavaScript中&#xff0c;要设置一个操作在指定延迟后&#xff08;例如3秒&#xff09;执行&#xff0c;可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法&#xff0c;它接受两个参数&#xff1a; 要执行的函数&…...

验证redis数据结构

一、功能验证 1.验证redis的数据结构&#xff08;如字符串、列表、哈希、集合、有序集合等&#xff09;是否按照预期工作。 2、常见的数据结构验证方法&#xff1a; ①字符串&#xff08;string&#xff09; 测试基本操作 set、get、incr、decr 验证字符串的长度和内容是否正…...