【JavaSE】Comparable接口和Comparator接口

news2024/12/30 2:34:32

文章目录

  • 一、Comparable接口
  • 二、Comparator接口

一、Comparable接口

当我们要比较两个类的大小时,我们该如何比较呢,是这样吗?
在这里插入图片描述

这样写是错误的,所以我们需要用到接口Comparable的CompareTo方法。

而ComparaTo是抽象方法,所以我们可以根据我们的需求进行重写。
在这里插入图片描述


class Student implements Comparable<Student>{ //<Student>是泛型内容先不用管谁实现这个接口就写谁
    public String name;
    public int age;
    public double score;

    public Student(String name, int age, double score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }
    //通过年龄进行比较
    @Override
    public int compareTo(Student o) {
        return this.age - o.age;    //this谁调用该方法就是谁,o是传入的对象。
    }

}

public class Test1 {
    public static void main(String[] args) {
        Student student1 = new Student("张三",19, 86);
        Student student2 = new Student("李四",23, 84);
        
        if(student1.compareTo(student2) > 0) {
            System.out.println("student1 > student2");
        }else if(student1.compareTo(student2) == 0) {
            System.out.println("student1 = student2");
        }else {
            System.out.println("student1 < student2");
        }
    }
}

在这里插入图片描述李四年龄大于张三返回一个负数

当然也可以通过名字进行比较:
在这里插入图片描述
因为字符串是String类型,而 String 已经实现了Comparable接口的 compareTo() 方法.

在这里插入图片描述在这里插入图片描述

当然也可以根据成绩进行比较:
在这里插入图片描述

但是当我们这么些时就会有写的很死,如你重写了compareTo()方法,用年龄进行比较,以后的都需要用年龄比较,所以我们了解另一个接口Comparator。



二、Comparator接口


在使用Comparator接口时,我们主要用到 compare() 方法进行比较,所以重写 compare() 抽象方法。

import java.util.Comparator;

class Student {
    public String name;
    public int age;
    public double score;

    public Student(String name, int age, double score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }
}
//年龄比较器
class AgeComparator implements Comparator<Student> {
    @Override
    public int compare(Student o1, Student o2) {
        return o1.age - o2.age;
    }
}
//名字比较器
class NameComparator implements Comparator<Student> {
    @Override
    public int compare(Student o1, Student o2) {
        return o1.name.compareTo(o2.name);
    }
}
//成绩比较器
class ScoreComparator implements Comparator<Student> {
    @Override
    public int compare(Student o1, Student o2) {
        return (int)(o1.score - o2.score);
    }
}

public class Test1 {
    public static void main(String[] args) {
        Student student1 = new Student("张三",19, 86);
        Student student2 = new Student("李四",23, 84);
        //成绩比较
        ScoreComparator score = new ScoreComparator();
        System.out.println(score.compare(student1,student2));
        //年龄比较
        AgeComparator age = new AgeComparator();
        System.out.println(age.compare(student1,student2));
        //名字比较
        NameComparator name = new NameComparator();
        System.out.println(name.compare(student1,student2));
    }
}

在这里插入图片描述

这样我们就可以根据我们的需求调用不同的比较器了。
注意:在使用Compartor接口时需要我们导入 import java.util.Comparator 下的Comparator接口。

好的,到这里本章节就结束了,如发现有错误,请各位大佬及时指出。

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

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

相关文章

74cms骑士人才招聘系统源码SE版 v3.16.0

介绍&#xff1a; 74cms骑士人才招聘系统是一项基于PHPMYSQL为核心开发的一套专业人才招聘系统。骑士人才系统拥有十多年的人才招聘系统运营解决方案&#xff0c;同时我们提供智能化招聘系统、招考系统等全方位系统化解决方案。 74cms骑士人才招聘系统SE版&#xff1a; 更懂运…

Redhat(9)-磁盘分区-parted-swap-lvm-stratis-vdo-tuned

1.parted 2.swap 3.lvm 4.stratis 5.vdo 6.tuned 1.MBR: MASTER BOOT LOADER 逻辑分区&#xff1a;可以直接格式化使用 扩展分区&#xff1a;不可以直接格式化使用 2.GPT分区 1.parted 2.swap 虚拟内存 linux vmmemoryswap Hibernate :内存 3.lvm 3.1实现的功能和优点&…

前三强重磅揭晓!华秋第八届硬创大赛-全国总决赛路演活动成功举办!

11月19日&#xff0c;华秋第八届硬创大赛-全国总决赛路演活动在深圳高交会成功举办。此次项目路演活动是在深圳市福田区科技创新局指导下&#xff0c;由深圳华秋电子有限公司主办&#xff0c;深圳高交会联合主办的硬件创新领域专业赛事。共13个硬科技领域的优秀项目从众多报名项…

零基础入门JavaWeb——Web基本概念

一、服务器和客户端的概念 1.1 客户端的作用 与用户进行交互&#xff0c;用于接收用户的输入、展示服务器端的数据以及向服务器端传递数据。 1.2 服务器的作用 与客户端进行交互&#xff0c;接收客户端的数据、处理具体的业务逻辑、传递给客户端需要的数据。 1.3 什么是服务…

王道考研——操作系统(第二章 进程管理)

一、进程的概念、组成、特征 进程的概念 进程的组成——PCB 进程的组成——程序段、数据段 知识滚雪球&#xff1a;程序是如何运行的&#xff1f; 进程的组成 进程的特征 知识回顾与重要考点 二、进程的状态与转换 进程的状态——创建态、就绪态 进程的状态——运行态 进程的…

5G+北斗:人员定位系统为化工厂定位赋能

人员定位系统是集计算机软硬件、信息采集处理、无线数据传输、网络数据通讯、自动控制等技术多学科综合应用为一体的自动识别信息技术产品&#xff0c;可以实现对不同人、物在不同状态下的智能识别。 物联网时代&#xff0c;人们以感知为目的实现人与人、人与物、物与物全面互联…

【栈和队列的相互转换】

目录&#xff1a;前言一、 用队列实现栈&#xff08;一&#xff09; 题目分析1.队列基本操作2.画图分析3.翻译图解&#xff08;二&#xff09;整体代码二、用栈实现队列&#xff08;一&#xff09; 题目分析1.栈基本操作2.画图分析3.翻译图解&#xff08;二&#xff09;整体代码…

wy的leetcode刷题记录_Day47

wy的leetcode刷题记录_Day47 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间&#xff1a;2022-11-20 前言 补 目录wy的leetcode刷题记录_Day47声明前言799. 香槟塔题目介绍思路代码收获105. 从前序与中序遍历序列构造二叉树题目介绍思路代码收获79…

优思学院|精益六西格玛的成本效益怎么样?

所有精益六西格玛的实施都以项目工作为中心&#xff0c;因此可以用投资回报率&#xff08;ROI&#xff09;确定成本效益。项目可以集中在通过改善营收或降低成本&#xff08;或两者&#xff09;来提高净利润。 它们也可以侧重于通过减少资产&#xff08;通常是库存或应收账款&…

迅为IMX8M开发板2gst-inspect-1.0测试

gstreamer 开发中&#xff0c;一般开发思路为&#xff1a;寻找命令行实现--命令行验证--将命令行集成到代码中---代码工程 化。当然如果你要代码更优雅一点&#xff0c;可以用命令行用对应的 API 来实现。本节来总结一下 gstreamer 的常用 使用过程。 gst-inspect 可以查看插件…

新鲜出炉,Linux眼花缭乱的小寄巧

14天学习训练营导师课程&#xff1a; 互联网老辛《 符合学习规律的超详细linux实战快速入门》 努力是为了不平庸~ 学习有些时候是枯燥的&#xff0c;但收获的快乐是加倍的&#xff0c;欢迎记录下你的那些努力时刻&#xff08;学习知识点/题解/项目实操/遇到的bug/等等&#xf…

MySQL_数据库的约束

文章目录 1. NULL约束 2. UNIQUE(唯一约束) 3. DEFAULT(默认值约束) 4. PRIMARY KEY(主键约束) 5. FOREIGN KEY(外键约束) 数据库的约束就是关系型数据库给我们提供的一种"校验数据"合法性的机制 1. NULL约束 创建表时,可以指定某列不为空 create table stud…

MindFusion Scheduler for JavaScript 2.0 Crack

用纯 JAVASCRIPT 编写的交互式调度库--MindFusion Scheduler for JavaScript MindFusion 为所有需要呈现交互式时间表、活动日程或约会日历的应用程序提供了完整的解决方案。完全响应、高度可定制且易于集成的 JavaScript 调度库&#xff0c;您可以根据需要快速编程。 本土化 本…

Centos7 linux 中 防火墙操作命令及SSH远程连接

文章目录查看防火墙状态开启防火墙关闭防火墙查看对外开放的端口状态对外开发端口SSH 工具远程连接VMware 虚拟机查看防火墙状态 systemctl status firewalld开启防火墙 systemctl start firewalld若遇到无法开启 先用&#xff1a;systemctl unmask firewalld.service 然后&a…

Java继承——抽象类与接口的比较以及内部类、匿名类、异常类......

文章目录壹、抽象类与接口的比较贰、内部类叁、匿名类&#xff08;匿名内部类&#xff09;肆、异常类&#xff08;Exception&#xff09;壹、抽象类与接口的比较 1、抽象类与接口都可以有抽象方法&#xff1b; 2、接口中只可以有常量&#xff0c;不可以有变量&#xff1b;而抽…

Mac | 使用 Wineskin 在 Mac 上运行 exe 程序

​1 Wineskin 简介 Wineskin is a user-friendly tool used to make ports of Microsoft Windows software to macOS. 很多实用工具只有 Windows 版本&#xff0c;而 Mac 机器本身不支持运行 exe 程序&#xff0c;除了安装双系统、虚拟机等方法外&#xff0c;Wineskin 可以将…

使用HTML+CSS实现一个静态页面——面包蛋糕 (9页)

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

xlsx库实现纯前端导入导出Excel

前言 最近做了前端导入、导出 Excel 的需求&#xff0c;用到了js-xlsx这个库&#xff0c;该库文档提供的用例很少&#xff0c;并不是很友好。本文总结一下我是如何实现需求的。 需求 提供一个 Excel 文件&#xff0c;将里面的内容转成 JSON 导入数据提供一个 JSON 文件&…

3D-2D:PnP

直接线性变换 Perspective-n-Point 是求解3D到2D点对运动的方法。它描述了已知n个3D空间点及其投影位置时&#xff0c;如何估计相机的位姿。 2D-2D的对极几何方法需要8个或8个以上的点对(以八点法为例)&#xff0c;且存在初始化、纯旋转和尺度的问题。然而&#xff0c;如果两张…

【数据挖掘】数据预处理

Outline ChapterOverview1.为什么要对数据预处理2.数据描述性总结3.数据清洗4.数据变换5.数据整合6.数据归约7.离散化与概念层级8.总结Chapter 1. 为什么要预处理 我们从现实生活中获得的原始数据&#xff0c;或多或少会因为各种原因不能直接使用。例如&#xff1a; 不完整 …