【JAVA】接口杂谈:Java中的比较器(Comparator 接口)

这篇来介绍自定义类型对象的比较方法,利用Comparable 接口和 Comparator  接口

目录

问题引入:

一、Comparable 接口

1.1比较学生的年龄

方法:

结果:

1.2比较学生的姓名

方法:

结果:

1.3 案例再展示( Arrays.sort(students))

1.3.1实验 short 排序

1.3.2.异常报告

1.3.3得出结论:

1.4 Comparable 接口的缺点

二、比较器 Comparator 接口

2.1比较学生的年龄

2.2 比较学生姓名 

2.3  案例再展示 比较器( Arrays.sort(students))

三、对比 Comparable 接口和 Comparator  接口


问题引入:

如果我们要比较两个整型的值,我们直接输出就好。

但是当我们想比较两个学生,创建类去实例化,实例化后,可以比较对象的引用吗?这显然不可以,这样直接比没有任何意义


问题就来了:

自定义类型怎么比较?

规则怎么制定?


一、Comparable 接口

Comparable接口是一个泛型(要比较什么类型,就把类名传入)接口,用于定义对象的排序规则。该接口中只有一个方法compareTo(),用于比较这个对象另一个对象的大小关系

compareTo()方法的如下: int compareTo(T obj)

用法:

compareTo()方法返回一个整数值表示当前对象与参数对象的大小关系

  • 如果返回值小于0,表示当前对象小于参数对象;
  • 如果返回值等于0,表示当前对象等于参数对象;
  • 如果返回值大于0,表示当前对象大于参数对象。

Comparable接口需要实现类重写compareTo()方法根据对象的某个属性或多个属性进行比较,从而确定对象的大小关系


有了上面的介绍,我们来实现一下Comparable接口 重写comparto 方法

1.1比较学生的年龄

方法:


结果:


1.2比较学生的姓名

方法:


结果:

表明zhangsan大于lisi(只是字符串长度的比较)

1.3 案例再展示( Arrays.sort(students))

1.3.1实验 short 排序

利用 Arrays.sort(students)排序,直接就排序好了数组,真神奇,它怎么知道我想按年龄排的,其实这个方法背后也离不开Comparable接口 comparto 方法,当我们不再实现接口和方法,再运行


1.3.2.异常报告

报告了异常,类型转换异常,我们看看源码


1.3.3得出结论:

自定义类型涉及到大小的比较,现阶段一定要实现Comparable接口


1.4 Comparable 接口的缺点

我们每次比较不同的属性都要修改comparto 方法,这种方法适合固定的属性比较,好麻烦有什么办法吗?



二、比较器 Comparator 接口

比较器(Comparator)是Java中一个接口,用于定义两个对象之间的比较规则。它通常用于排序算法中,使得对象可以按照自定义的规则进行排序。

比较器接口中只有一个方法:compare(Object o1, Object o2),该方法用于比较两个对象。返回一个负整数、零或正整数,表示o1小于、等于或大于o2。根据返回值的不同,可以确定两个对象的相对顺序。

比较器的使用可以实现灵活的排序规则,不依赖于对象的自然排序。它可以按照不同的属性、不同的顺序进行排序,同时也可以处理特定的比较需求,例如忽略大小写比较字符串等。

我们上面使用Comparable接口,每次要重新写比较的方法,来看看 Comparator 接口怎么改善


2.1比较学生的年龄


2.2 比较学生姓名 


2.3  案例再展示 比较器( Arrays.sort(students))



三、对比 Comparable 接口和 Comparator  接口

总的来说,Comparable接口是对象自身的比较逻辑,Comparator接口是一个独立的比较器,可以在不同的排序方式下进行比较。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/887956.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pytorch使用手册- PyTorch 中 non_blocking 和 pin_memory() 的使用指南(专题十一)

1. 介绍 在许多 PyTorch 应用中,将数据从 CPU 转移到 GPU 是非常基础的操作。用户理解在设备间传输数据时最有效的工具和选项非常重要。本教程将重点讲解两种在 PyTorch 中进行设备间数据传输的关键方法:pin_memory() 和带有 non_blocking=True 选项的 to()。 1.1 你将学习…

数据结构 (19)二叉树

一、定义 二叉树(Binary Tree)是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。若集合为空,则称该二叉树为…

路由策略与路由控制实验

AR1、AR2、AR3在互联接口、Loopback0接口上激活OSPF。AR3、AR4属于IS-IS Area 49.0001,这两者都是Level-1路由器,AR3、AR4的系统ID采用0000.0000.000x格式,其中x为设备编号 AR1上存在三个业务网段A、B、C(分别用Loopback1、2、3接…

flutter 解决webview加载重定向h5页面 返回重复加载问题

long time no see. 如果觉得该方案helps,点个赞,评论打个call,这是我前进的动力~ 通常写法: 项目里用的webview_flutter 正常webview处理返回事件 if (await controller.canGoBack()) {controller.goBack(); } else {Navigator…

Kubernetes集群操作

查看集群信息: kubectl get nodes 删除节点 (⽆效且显示的也可以删除) 后期如果 要删除某个节点,为了不增加其他节点的访问压力,先增加一个节点,再删除要删除的节点 语法 :kubect delete…

【C++】从零到一掌握红黑树:数据结构中的平衡之道

个人主页: 起名字真南的CSDN博客 个人专栏: 【数据结构初阶】 📘 基础数据结构【C语言】 💻 C语言编程技巧【C】 🚀 进阶C【OJ题解】 📝 题解精讲 目录 前言1 红黑树的概念**红黑树的五大性质** 2 红黑树的实现2.1 红黑树的结构…

支持ACME协议可免费申请SSL证书的多种渠道

目录 一、ACME 协议 二、ACMESSL可视化 三、ACME证书申请流程 三、ACME申请提交 四、使用 ACME 的好处 五、ACME总结 一、ACME 协议 ACME 协议是一种开放标准,旨在自动执行数字证书颁发和续订流程,它彻底改变了证书管理。ACME 的开发旨在简化整个…

Socket编程(TCP/UDP详解)

前言:之前因为做项目和找实习没得空,计算机网络模块并没有写成博客,最近得闲了,把计算机网络模块博客补上。 目录 一,UDP编程 1)创建套接字 2)绑定端口号 3)发送与接收数据 4&…

【人工智能-科普】图神经网络(GNN):与传统神经网络的区别与优势

文章目录 图神经网络(GNN):与传统神经网络的区别与优势什么是图神经网络?图的基本概念GNN的工作原理GNN与传统神经网络的不同1. 数据结构的不同2. 信息传递方式的不同3. 模型的可扩展性4. 局部与全局信息的结合GNN的应用领域总结图神经网络(GNN):与传统神经网络的区别与…

【知识分享】离散行业有哪些?

【大家好,我是唐Sun,唐Sun的唐,唐Sun的Sun。】 离散行业是指生产过程由一系列独立、非连续的工序或环节组成,产品形态和性质发生变化的行业,常见的离散行业有以下几类: 装备制造行业 包括通用装备制造、专…

【Spark源码分析】规则框架- `analysis`分析阶段使用的规则

analysis分析阶段使用的规则 规则批策略规则说明SubstitutionfixedPointOptimizeUpdateFields该规则优化了 UpdateFields 表达式链,因此看起来更像优化规则。但是,在处理深嵌套模式时,UpdateFields 表达式树可能会非常复杂,导致分…

Qt详解QUiLoader 动态加载UI文件

文章目录 详解 QUiLoader 模块的使用1. QUiLoader 简介1.1 应用场景 2. 准备工作2.1 添加模块依赖2.2 引入头文件 3. 使用 QUiLoader 加载界面3.1 示例代码form.uimain.cpp 4. 常用方法详解4.1 load函数原型作用参数返回值示例代码 4.2 createWidget函数原型作用参数返回值示例…

【Git 工具】用 IntelliJ IDEA 玩转 Git 分支与版本管理

文章目录 一、使用 IDEA 配置和操作 Git1.1 查看 Idea 中的 Git 配置1.2 克隆 Github 项目到本地 二、版本管理2.1 提交并推送修改2.2 拉取远程仓库2.3 查看历史2.4 版本回退 三、分支管理3.1 新建分支3.2 切换分支3.2 合并分支3.4 Cherry-Pick 参考资料 一、使用 IDEA 配置和操…

shell编程(4)脚本与用户交互以及if条件判断

声明: 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…

架构-微服务-服务调用Dubbo

文章目录 前言一、Dubbo介绍1. 什么是Dubbo 二、实现1. 提供统一业务api2. 提供服务提供者3. 提供服务消费者 前言 服务调用方案--Dubbo‌ 基于 Java 的高性能 RPC分布式服务框架,致力于提供高性能和透明化的 RPC远程服务调用方案,以及SOA服务治理方案。…

【Python网络爬虫笔记】2-HTTP协议中网络爬虫需要的请求头和响应头内容

1 HTTP 协议整理 HTTP(Hyper Text Transfer Protocol)即超文本传输协议,是用于从万维网(WWW)服务器传输超文本到本地浏览器的传送协议,直白点儿,就是浏览器和服务器之间的数据交互就是通过 HTT…

【前端开发】小程序无感登录验证

概述 封装的网络请求库,主要用于处理 API 请求并支持自动处理 token 过期 和 token 刷新,适用于需要身份验证的应用场景,特别是在移动端中。 主要功能 自动附加 Token 在每个请求中自动附加 Authorization 头部,使用存储的 acces…

关于Spring基础了解

Spring简介 Spring框架是一个开源的Java应用框架,旨在简化企业级应用程序的开发。它提供了一系列强大的工具和服务,帮助开发者构建高质量的Java应用程序。Spring框架的核心理念是使开发过程更加模块化、可测试和可维护。 主要特性 依赖注入&#xff08…

解析 SpringBoot 新冠密接者跟踪系统:灵活的权限管理机制

第2章 程序开发技术 2.1 Mysql数据库 为了更容易理解Mysql数据库,接下来就对其具备的主要特征进行描述。 (1)首选Mysql数据库也是为了节省开发资金,因为网络上对Mysql的源码都已进行了公开展示,开发者根据程序开发需要…

TYUT设计模式大题

对比简单工厂,工厂方法,抽象工厂模式 比较安全组合模式和透明组合模式 安全组合模式容器节点有管理子部件的方法,而叶子节点没有,防止在用户在叶子节点上调用不适当的方法,保证了的安全性,防止叶子节点暴露…