Java零基础入门-Comparable vs Comparator(上)

哈喽,各位小伙伴们好,我是喵手。

        今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流学习,互相学习,才能成长的更快,对吧。

        我是一名java开发,所以日常接触到最多的就是java啦,所以我趁自己有空,就来好好回忆,把自己学到的会的,进行输出,不图什么有回报,只想能帮助到更多的小伙伴,就好。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对喵手我创作道路上最好的鼓励与支持!

一、前言

        论前几期啊,我们是分别讲了Object类Date类FormDate类Calendar类System类StringBuilder类,不知道大家掌握的如何,如果没有及时巩固的同学,可以看我这里,我给大家罗列了下,快速学习通道,只希望能帮助到大家更好的学习与成长,这就是我写作的初衷。

  • java之Date类讲义
  • java之DateFormat类讲义
  • java之Calendar类讲义
  • java之System类讲义
  • java之StringBuilder类讲义
  • java之Collection类
  • java之包装类
  • java之Iterator迭代器
  • java之List集合

       在前几期,我们是有讲过Collection类的,不知道大家还是否有印象,我们都知道,Collection分为两类,一类是单列集合,一类是双列集合。

       而今天我们就来讲一期Collections工具集使用的下篇,(Collections其包位置:java.utils.Collections),它?与Collection类?不要误解,Collections是一集合工具类,用来对集合进行一系列操作的工具类。

二、Comparable

1️⃣概念:

        上一期说起Collections所提供的sort()排序api,今天我就要给大家科普下了。Comparable和Comparator这两个接口了。

        咱们先来聊聊Comparable吧,首先它是一个泛型接口。其次在Java类库中:Byte,Short,Integer,Long,Float,Double、及Date类等都有实现这Comparable接口,这些基本类型对象都可以直接调用实现了Comparable接口的compareTo()方法来进行排序。

比如如下Integer源码截图:

再比如如下的Date类源码截图:

具体使用:我就以Date()类来进行演示啦。

2️⃣演示:

演示代码如下:

    @Testpublic void testSortCom() throws ParseException {//获取当前时间Date date = new Date();System.out.println("time1= " + date);//定义一个时间与当前时间进行比较SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");Date privateDate = format.parse("2022-05-20");System.out.println("time2= " + privateDate);//比较时间大小,若两相等返回0,大于返回1,小于返回-1。int res = date.compareTo(privateDate);System.out.println("time1与time2比较结果为:" + res);}

3️⃣实例演示结果:

演示代码执行结果截图如下:

4️⃣总结:

         Comparable强行对实现它的每个类的对象进行整体排序,像这种就是类的自然排序,compareTo()方法就被称为Comparable接口的自然比较方法。其方法只能在类中实现一次,不能经常修改类的代码从而实现自定义排序,局限还是比较大的。

        像实现此接口的数组和集合,可以通过通过Collections.sort() 或Arrays.sort()进行自动排序,但你说要实现集合中的自定义的对象排序,就没法直接使用Collections.sort()方法了,编译期不知道按照什么规则来进行排序,直接使用肯定报错,这个时候你就得用到Comparable接口了。

        因此Comparable常被称为内比较器。

5️⃣CompareTo()用法:

拓展:

int  CompareTo(T object)

Java提供Comparable接口就是为了解决比较两个对象的问题。

其方法相对于比较对象的顺序,小于返回负整数,等于返回0,大于返回正整数。

三、Comparator

1️⃣概念:

        上述是讲了Comparable接口,接下来就是Comparator。与上面讲的Comparable接口所不同的是:Comparator位于java.util包下,而Comparable位于java.lang包下;而且Comparable接口是将比较代码嵌入到需要进行比较的类的自身代码中,像我列举的Integer、Double等,它们都是直接实现了Comparable接口的CompareTo()方法,而Comparator接口不同,它的使用是在一个独立的类外进行实现比较的,不但提供了升序降序排序法,还不强制排序规则,可自定义指定排序规则,比如按年龄排序,按首字母排序等。

        该接口定义如下:

package java.util;public interface Comparator<T>{int compare(T o1, T o2);boolean equals(Object obj);
}

2️⃣注意:

       1、若一个类实现Comparator接口;它一定要实现compare(T o1, T o2) 方法,可以不实现 equals(Object obj) 方法。

        2、其中int compare(T o1, T o2) 方法比较的是o1和o2的大小。若比较结果返回“负数”,表示o1比o2小;返回“零”,表示o1等于o2;返回“正数”,表示o1大于o2。

3️⃣Comparator使用场景:

  1.  若类已经实现Comparable接口,但是它提供的默认排序规则满足不了你的排序需求,你想根据自己的业务情况重新定义排序比较规则。那这时候你可以使用匿名内部类的方式来达到你比较的目的。
  2.  某个类你的手里只有字节码文件,无法拿到源代码,那不管这个类有没有实现Comparable接口,你就可以通过Comparator接口来达到比较的目的。 

        ... ...

       好啦,以上就是本期内容的全部教学内容啦,如果对文中的任何知识点有疑问,欢迎评论区评论留言呀,我看见都会一一解答的。

四、文末

       教学是结束了,但是有些话不知我但讲不当讲,啊哈哈, 可我还是想说给你们听听。如下是我很喜欢的一句话,我打算送给你们,希望我们都能变得更好更优秀。

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!

-------------------------------------------

⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

-------------------------------------------

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

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

相关文章

System是什么?为什么不能直接输出null?

在看学习下面的知识前&#xff0c;得先对java核心类库有个大致的了解&#xff0c;详情可参考链接 java基本概念-扩展点-CSDN博客 1、System 1.1 System是什么&#xff1f; System是一个类&#xff0c;它包含了一些有用的属性和方法。 1.2 System实现的功能 &#xff08;1&…

【深度学习】换脸新科技,InstantID: Zero-shot Identity-Preserving Generation in Seconds

论文&#xff1a;https://arxiv.org/abs/2401.07519 代码:https://github.com/InstantID/InstantID demo&#xff1a;https://huggingface.co/spaces/InstantX/InstantID 文章目录 1 引言2 相关工作2.1 文本到图像扩散模型2.2 主题驱动的图像生成2.3 保持ID的图像生成 3 方法3.…

zabbix5监控tomcat

zabbix tomcat客户端配置 1、配置tomcat catalina.sh文件 CATALINA_OPTS"$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port12345 -Dcom.sun.management.jmxremote.authenticatefalse -Dcom.sun.management.jmxremote.sslfalse -Djav…

smart-doc 社区 Committer 晋升公告

我们非常荣幸地宣布&#xff0c;经过 PMC 委员会的提名和讨论&#xff0c;社区成员李星志&#xff08;GitHub ID: netdied&#xff09;、陈琪&#xff08;GitHub ID: chenqi146&#xff09;和李兵&#xff08;GitHub ID: abing22333&#xff09;正式晋升为同程旅行 smart-doc 开…

Vue3全家桶 - Vue3 - 【3】模板语法(指令+修饰符 + v-model语法糖)

一、模板语法 主要还是记录一些指令的使用和vue2的区别&#xff1b;vue3指令导航&#xff1b; 1.1 v-text 和 v-html 指令的区别&#xff1a; v-text&#xff1a; 更新元素的文本内容&#xff1b;v-text 通过设置元素的 textContent 属性来工作&#xff0c;因此它将覆盖元素…

数据结构:静态链表(编程技巧)

链表的元素用数组存储&#xff0c; 用数组的下标模拟指针。 一、理解 如果有些程序设计语言没有指针类型&#xff0c;如何实现链表&#xff1f; 在使用指针类型实现链表时&#xff0c;我们很容易就可以直接在内存中新建一块地址用于创建下一个结点&#xff0c;在逻辑上&#x…

3、设计模式之工厂模式

工厂模式是什么&#xff1f;     工厂模式是一种创建者模式&#xff0c;用于封装和管理对象的创建&#xff0c;屏蔽了大量的创建细节&#xff0c;根据抽象程度不同&#xff0c;主要分为简单工厂模式、工厂方法模式以及抽象工厂模式。 简单工厂模式 看一个具体的需求 看一个…

面向对象(精髓)变继承关系为组和关系(_Decorator模式)

在软件开发中&#xff0c;设计模式是解决常见问题的可重用解决方案。在面向对象编程中&#xff0c;继承和组合是两种常用的代码复用方式。然而&#xff0c;随着软件需求的不断变化&#xff0c;我们需要更灵活的设计方式来应对不断变化的需求。在本文中&#xff0c;我们将讨论从…

计算机网络——TCP/IP网络层次模型

计算机网络——TCP/IP网络层次模型 TCP/IP网络模型的起源TCP/IP网络层次的结构TCP/IP如何交互 TCP/IP协议栈TCP/IP协议栈主要协议 TCP/IP 和 OSI之间的区别面向连接和无连接面向连接三次握手&#xff0c;四次挥手 无连接 我们上一次了解了OSI的网络层次模型&#xff0c;如果还没…

Linux学习-内存管理

目录 内存管理 malloc free 使用 字符串存储申请堆区 自主输入个数&#xff0c;然后通过malloc在程序中申请空间&#xff0c;不用必须提前指定大小 内存溢出 内存泄漏 内存碎片 内存管理 函数名就是指向该函数的函数指针。 堆区是自低向高&#xff0c;栈区是自高向低…

ffmpeg日记4001-原理介绍-视频切割原理

原理 打开输入---->打开输出---->根据输入来创建流---->拷贝流设置---->循环读帧---->判断时间点是否到达切割点&#xff0c;并做设置---->设置pts和dts---->写入---->善后 重点是pts和dts如何设置。参考《ffmpeg学习日记25-pts&#xff0c;dts概念的…

ftp速度太慢只有几十k,怎么解决?

FTP是目前许多企业日常运营中还在用的文件传输方式。虽然比较普遍&#xff0c;然而&#xff0c;许多用户在使用FTP时经常遇到速度缓慢的问题&#xff0c;有时甚至只有几十KB/s。这不仅影响工作效率&#xff0c;还可能导致许多数据传输的延迟的问题。本文将探讨FTP速度慢的原因&…

计算机服务器中了faust勒索病毒怎么解密,faust勒索病毒解密工具流程

在互联网飞速发展的今天&#xff0c;越来越多的企业走向了数字化办公模式&#xff0c;许多企业开始利用网络计算机开展各项工作业务&#xff0c;网络也为企业的生产效率提供了极大便利&#xff0c;但网络中存在许多恶意威胁。近日&#xff0c;云天数据恢复中心接到许多企业的求…

Java 学习和实践笔记(34):对象的转型(casting)

对象的转型&#xff08;casting)有两种&#xff0c;一种是向上转型&#xff0c;一种是向下转型。 向上转型&#xff1a;父类引用指向子类对象。这属于自动类型转换&#xff0c;编译器会自动完成。 上一节的多态中&#xff0c;形参为父类Animal, 但是调用时实参为子类对象Dog&…

linux中查看并修改日期

1.如何在终端控制行界面显示并且调整日期&#xff1a; 显示当前日期&#xff1a; 2.显示当前年份&#xff1a; 3.显示当前月份&#xff1a; 4.显示当前天数&#xff1a; 5.显示到目前为止的天数&#xff1a; 6.显示日期&#xff1a; date “%x“ ≈ date ”%Y %m %d"…

09-设计模式 面试题

你之前项目中用过设计模式吗? 工厂方法模式分类 简单工厂模式工厂方法模式抽象工厂模式工厂模式 需求:设计一个咖啡店点餐系统。 设计一个咖啡类(Coffee),并定义其两个子类(美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】);再设计一个咖啡店类(CoffeeStore)…

一、什么是 HarmonyOS ?

HarmonyOS 是华为开发的一款面向未来的全场景分布式智慧操作系统&#xff0c;将逐步覆盖 18N 全场景终端设备。 对消费者而言&#xff0c;HarmonyOS 用一个“统一的软件系统”&#xff0c;从根本上解决消费者面对大量智能终端体验割裂的问题&#xff0c;为消费者带来统一、便利…

Kafka Stream入门

1. 什么是流式计算 流式计算&#xff08;Stream Processing&#xff09;是一种计算模型&#xff0c;旨在处理连续的数据流。与传统的批处理模型不同&#xff0c;流式计算可以实时或接近实时地处理和分析数据&#xff0c;这意味着数据在生成后不久就被处理&#xff0c;而不是存…

基于android的物业管理系统的设计与实现19.8

目录 基于android的物业管理系统的设计与实现 3 摘 要 3 Android property managemengt system 5 Abstract 5 1 绪论 6 1.1 选题背景 6 1.2 课题研究现状 6 1.3 设计研究主要内容 7 1.4 系统主要设计思想 8 2 开发环境 8 2.1 Android系统的结构 8 图2-1 Android系统架构图 9 2…

Python绘图-14绘制3D图(下)

14.7绘制3D等高线图个性化colormap 14.7.1图像呈现 14.7.2绘图代码 import numpy as np # 导入numpy库&#xff0c;numpy是Python的一个强大的数值计算扩展程序库&#xff0c;支持大量的维度数组与矩阵运算。 import matplotlib.pyplot as plt # 导入matplotlib的绘图模块p…