首页 > 编程语言 >【JAVA】接口杂谈:Java中的比较器(Comparator 接口)

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

时间:2024-11-30 23:03:07浏览次数:7  
标签:Comparable 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接口是一个独立的比较器,可以在不同的排序方式下进行比较。

标签:Comparable,Java,Comparator,对象,接口,排序,比较
From: https://blog.csdn.net/qq_75234423/article/details/144153806

相关文章

  • Java 百度网盘300文件一组 文件批量重命名
     按260个文件一个文件夹publicstaticvoidmain(String[]args){Stringpath="F:\\壁纸爬虫合集\\爬虫文件夹No1";intfileCount=0;List<List<File>>folderList=newArrayList<>();List<File>folder......
  • 【JAVA】第十二节:抽象类与接口(详细介绍)
    上一篇详细介绍了面向对象多态的知识,这篇来说说抽象类与接口。目录一、抽象类1.1抽象类是什么?1.2 抽象类的特点1.3抽象类出现的意义1.4匿名对象二、接口2.1接口是什么?2.2接口的特点2.3接口与接口的关系2.4接口出现的意义2.5接口的实现案例三、抽象类和接......
  • JavaScript 的新数组分组方法
    对数组中的项目进行分组,你可能已经做过很多次了。每次都会手动编写一个分组函数,或者使用 lodash 的 groupBy 函数。好消息是,JavaScript现在有了分组方法,所以你再也不必这样做了。Object.groupBy 和 Map.groupBy 这两个新方法将使分组变得更简单,并节省我们的时间或依赖性......
  • Java面试要点49 - Java ArrayList与LinkedList性能对比
    文章目录一、引入二、底层结构对比2.1ArrayList的实现原理2.2LinkedList的实现原理三、性能测试实战3.1测试代码实现四、性能特征分析4.1顺序添加性能4.2随机访问性能五、实际应用场景示例5.1数据缓存实现5.2消息队列实现六、总结一、引入在Java程序开......
  • Java面试要点50 - List的线程安全实现:CopyOnWriteArrayList
    文章目录一、引入二、实现原理解析2.1写时复制机制2.2读写分离策略三、性能测试分析四、应用场景分析4.1事件监听器管理4.2缓存实现五、最佳实践建议5.1性能优化技巧5.2常见陷阱规避总结一、引入在并发编程中,线程安全的集合类扮演着重要角色。CopyOnWri......
  • 行驶证 OCR 识别API接口的影响因素
    一、影响因素(一)证件质量与图像质量行驶证的质量对OCR识别API界面的效果有重要影响。清晰的文件可以使识别系统准确地捕获文本信息,而模糊的文本可能会导致识别错误。而且不同地区、不同年份的行驶证在字体、排版、格式等方面可能存在差异,甚至可能存在手写输入的情况,这会......
  • Java日志手机号脱敏工具类
    背景在开发过程中,很容易将用户敏感信息,例如手机号码、身份证等,打印在日志平台。为了保护用户数据,又不影响日志的打印,需要将日志中的敏感信息进行脱敏。效果没看明白,强烈建议pull项目,执行一下项目中SensitiveUtils#main方法。特性支持多层级Json/对象字段脱敏支持一次......
  • Java常见的锁策略
    目录Java常见的锁策略悲观锁和乐观锁轻量级锁和重量级锁自旋锁和挂起等待锁普通互斥锁和读写锁公平锁和非公平锁可重入锁和不可重入锁Java中的synchronized算哪种情况?系统原生的锁算哪种情况?synchronized的加锁过程,尤其是“自适应”是咋回事?synchronized中内置的优化策略......
  • ssm基于Java的高校教学业绩信息管理系统(10279)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项......
  • Java 数据脱敏?别慌,掩护队已经上线!
    引言大家好!今天我们要聊一聊数据脱敏。这个词听起来像特工电影里的高科技武器,其实它就是给敏感数据穿上“伪装衣”,防止“坏人”偷窥。无论是银行账号、身份证号码、邮箱地址,这些信息都需要时刻保持低调。如何低调?没错——数据脱敏,Java已准备好为你服务!1.什么是数据脱敏?......