【JAVA/辨析】Java 中Comparable和Comparator区别比较

华为od 面试八股文_JAVA语言_08_含答案 华为od 面试八股文_JAVA语言 阅读详情

在其他blog上搜到了比较详细的解释,总结一下: Comparable 相当于对象的内部比较器;Comparator 相当于对象的外部比较器。


引用一下他的文章;

本文,先介绍Comparable 和Comparator两个接口,以及它们的差异;接着,通过示例,对它们的使用方法进行说明。

Comparable 简介
Comparable 是排序接口。
若一个类实现了Comparable接口,就意味着“该类支持排序”。  即然实现Comparable接口的类支持排序,假设现在存在“实现Comparable接口的类的对象的List列表(或数组)”,则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。
此外,“实现Comparable接口的类的对象”可以用作“有序映射(如TreeMap)”中的键或“有序集合(TreeSet)”中的元素,而不需要指定比较器。
Comparable 定义
Comparable 接口仅仅只包括一个函数,它的定义如下:

package java.lang;
import java.util.*;
public interface Comparable<T> {
    public int compareTo(T o);
}
说明:
假设我们通过 x.compareTo(y) 来“比较x和y的大小”。若返回“负数”,意味着“x比y小”;返回“零”,意味着“x等于y”;返回“正数”,意味着“x大于y”。
Comparator 简介
Comparator 是比较器接口。
我们若需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口);那么,我们可以建立一个“该类的比较器”来进行排序。这个“比较器”只需要实现Comparator接口即可。
也就是说,我们可以通过“实现Comparator类来新建一个比较器”,然后通过该比较器对类进行排序。
Comparator 定义
Comparator 接口仅仅只包括两个个函数,它的定义如下:

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

说明:
(01) 若一个类要实现Comparator接口:它一定要实现compare(T o1, T o2) 函数,但可以不实现 equals(Object obj) 函数。
        为什么可以不实现 equals(Object obj) 函数呢? 因为任何类,默认都是已经实现了equals(Object obj)的。 Java中的一切类都是继承于java.lang.Object,在Object.java中实现了equals(Object obj)函数;所以,其它所有的类也相当于都实现了该函数。
(02) int compare(T o1, T o2) 是“比较o1和o2的大小”。返回“负数”,意味着“o1比o2小”;返回“零”,意味着“o1等于o2”;返回“正数”,意味着“o1大于o2”。
Comparator 和 Comparable 比较
Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。
而Comparator是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
我们不难发现:Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。

原文:点击打开链接


【QML初学者文档】一问读懂QML基础开发(内附大量简单源码) QML是Qt的一大特色,拥有强大的UI制作能力。但是想要学好QML,还需要一些细节和技巧的掌握。本篇文章将为你提供完整的QML知识体系,让你成为Qt的UI魔法师! 阅读详情

相关推荐

大语言模型(LLM)在组合优化中的新突破:LLM-LNS与FunSearch性能对比

本文深入探讨了大语言模型(LLM)在组合优化中的创新应用,重点对比了LLM-LNS与FunSearch两种方法的性能差异。研究表明,LLM-LNS在物流路径规划、资源调度等场景中展现出显著优势,其双层自演化架构能有效平衡探索与利用,相比传统方法提升效率约43%。文章还提供了实践选择指南,帮助开发者根据具体需求选用合适的技术方案。

weixin_42526415的博客 407

java集合Comparator_Java集合中Comparable和Comparator辨析

一.Comparable和Comparator简介在对集合元素进行比较时一般使用TreeSet.对于简单的数据类型,TreeSet可以直接进行比较。但是对于复杂的数据类型,比如自己定义的数据类型或者类,就需要自己设置比较方法与比较规则了,这时就需要使用Comparable和Comparator。 Comparable和Comparator都是用来实现集合中的排序的,只是Comparable是在集合...

weixin_31759829的博客 277

Python:同花顺全数据接口

# -*- coding: utf-8 -*- from iFinDPy import * from datetime import datetime import pandas as pd import time as _time import json from threading import Thread,Lock,Semaphore import requests sem = Semaphore(5) # 此变量用于控制最大并发数 dllock = Lock() #此变量用来控制实时行情推

代码过客 4万+

Comparator与Comparable的区别

Comparator与Comparable的区别。

Android菜鸟的专栏 501

【计算机科学导论实验】加法图灵机模拟 题解

本文提供计算机科学导论课程“图灵机加法器”实验的个人思路,仅供参考。

Chavapa's blog 2578

YOLOv8 改进涨点 | 模块即插即用 直接可用

在目标检测任务中,注意力机制能够帮助模型聚焦于图像中的关键区域,显著提升检测精度。。创建模块代码注册模块修改任务解析tasks.py创建YAML配置文件模块核心优势适用场景计算开销SOCA捕获二阶统计信息,增强通道间相关性需要精细特征区分的场景中等SK自适应多尺度核选择多尺度目标检测中等偏高显式特征聚集-分配机制全局上下文建模中等A2-Net双线性注意力,高效全局交互复杂场景理解中等偏高CrissCross线性复杂度全局上下文高分辨率输入,长距离依赖较低。

u012133341的博客 2259

Comparator与Comparable辨析

Comparator与Comparable辨析声明文章均为本人技术笔记,转载请注明出处: [1] https://segmentfault.com/u/yzwall [2] blog.youkuaiyun.com/j_dark/比较三种状态根据需求定义“序”(升序 or 降序); + LESS_THAN: 返回负数,表示比较两元素满足序,无须调整,; + EQUAL:返回0,表示比较两元素“相等”,无须

less is more 609

由于找不到mfc110u.dll,无法继续执行代码,重新安装程序可能会解决此问题的 解决方案

本文主要介绍了由于找不到mfc110.dll,无法继续执行代码的解决方案,希望能对使用Windows的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 5万+

java集合中Comparable和Comparator辨析

一.Comparable和Comparator简介 在对集合元素进行比较时一般使用TreeSet.对于简单的数据类型,TreeSet可以直接进行比较。但是对于复杂的数据类型,比如自己定义的数据类型或者类,就需要自己设置比较方法与比较规则了,这时就需要使用Comparable和Comparator。 Comparable和Comparator都是用来实现集合中的排序的,只是Comparable是在

longshengguoji的专栏 3312

YOLO26改进 - C2PSA | C2PSA融合DiffAttention差分注意力:轻量级差分计算实现高效特征降噪,提升模型抗干扰能力

本文介绍了 DiffCLIP,一种将差分注意力机制集成到 CLIP 架构的视觉 - 语言模型,并将其应用于 YOLO26。差分注意力机制通过计算两个互补注意力分布的差值,抵消无关信息干扰。单头差分注意力将 Q 和 K 拆分,分别计算注意力分布后做差值融合;多头差分注意力则每个头独立执行差分操作后聚合输出。关键参数 λ 可动态调控噪声抵消强度。我们将 DiffAttention 代码集成到 YOLO26 中,替换原有模块。实验表明,改进后的 YOLO26 在图像 - 文本理解任务中表现出色。

魔改工程师的博客 602

超声波传感器(CHx01) 学习笔记 Ⅲ - I2C读写操作

CH-x01 通过 2 线 I2C 协议与主机处理器通信

nicole088的专栏 1740

Java中Comparable和Comparator的辨析

在对集合元素进行比较时一般使用TreeSet。对于简单的数据类型,TreeSet可以直接进行比较。但是对于复杂的数据类型,比如自己定义的数据类型或者类,就需要自己设置比较方法与比较规则了,这时就需要用到Comparable和Comparator了。1、Comparable和Comparator都是用来实现集合中的元素的比较、排序的。但也有所区别:(1)Comparable是在集合内部定义的方法实现排

TangowL 2254

YOLOv11改进 | 主干/Backbone篇 | 利用目标检测轻量化网络MobileNetV2替换Backbone(yolov11系列全系轻量化)

本文给大家带来的改进机制是,其是专为移动和嵌入式视觉应用设计的轻量化网络结构。其在MobilNetV1的基础上采用反转残差结构和线性瓶颈层。这种结构通过轻量级的深度卷积和线性卷积过滤特征,同时去除狭窄层中的非线性,以维持表征能力。MobileNetV2在性能上和精度上都要比V1版本强很多,其在多种应用(如对象检测、细粒度分类、面部属性识别和大规模地理定位)中都展现了一定的有效性。YOLOv11改进系列专栏——本专栏持续复习各种顶会内容——科研必备目录一、本文介绍二、MobileNetV2的框架原理。

Snu77的博客 2845

Java集合框架易混淆的接口和类:Collection,Collections,Collectors,Comparable,Comparator全解析

Java集合框架中易混淆概念辨析: Collection vs Collections Collection是集合体系的根接口,定义单值集合的通用方法(如add/remove) Collections是工具类,提供排序、查找等静态方法 Comparable vs Comparator Comparable定义对象自然排序规则(内部compareTo方法) Comparator作为外部比较器,支持自定义排序(compare方法) Collectors Java8 Stream API的终端操作工具类,用于数据

lyh2004_08的博客 1122

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java集合中Comparable和Comparator辨析

一.Comparable和Comparator简介在对集合元素进行比较时一般使用TreeSet.对于简单的数据类型,TreeSet可以直接进行比较。但是对于复杂的数据类型,比如自己定义的数据类型或者类,就需要自己设置比较方法与比较规则了,这时就需要使用Comparable和Comparator。 Comparable和Comparator都是用来实现集合中的排序的,只是Comparable是在集合内

Jungle_hello的博客 460

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java对象的比较

本文介绍了Java中对象比较的三种方法:equals()、Comparable和Comparator。equals()用于判断对象是否相等,默认比较地址,需要重写;Comparable接口实现类内部比较,重写compareTo()方法;Comparator则是外部比较器,通过实现compare()方法实现灵活比较。文章通过扑克牌类Card的示例代码演示了三种方法的实际应用,并指出PriorityQueue要求元素必须可比较的特性。最后比较了三种方式的适用场景:equals是基础比较,Comparable提供

su17643217590的博客 5442

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java Comparator与Comparable辨析

Comparator与Comparable辨析 声明 文章均为本人技术笔记,转载请注明出处:[1] https://segmentfault.com/u/yzwall[2] blog.youkuaiyun.com/j_dark/ 比较三种状态 根据需求定义“序”(升序 or 降序); LESS_THAN: 返回负数,表示比较两元素满足序,无须调整,...

weixin_34247155的博客 159

一文搞定java面试相近词的辨析

##程序、进程和线程 程序是静态代码 进程是运行中程序,进程包括多个线程 线程是进程中的一个子任务 ##精度和粒度 基本数据类型double,小数部分+指数部分,无法精确表示一个数 锁的粒度,行锁,分段锁,表锁 ##抽象类和接口 相同点 抽象类和接口都不能实例化自身 抽象类:抽象方法必须全部被子类实现,若不能全部实现,那子类必须也是抽象类 接口:方法也必须全部被子类实现,如果子类不能实现那么子类必须是抽象类。 不同点 抽象类:对一类事物抽象,定义属性和方法(可写方法) 接口:对一系列行为抽象

neheqi的博客 336

java list rank_java中list排序

List排序今天项目中涉及到对list的排序,特记录于此: 在Java Collection Framework中定义的List实现有Vector,ArrayList和LinkedList。这些集合提供了对对象组的索引访问。他们提供了元素的添加与删除支持。然而,它们并没有内置的元素排序支持。   你能...文章西北野狼2014-12-30617浏览量Java Collection接口在ja...

weixin_35126737的博客 485

java list对象排序_java中list排序

List排序今天项目中涉及到对list的排序,特记录于此: 在Java Collection Framework中定义的List实现有Vector,ArrayList和LinkedList。这些集合提供了对对象组的索引访问。他们提供了元素的添加与删除支持。然而,它们并没有内置的元素排序支持。   你能...文章西北野狼2014-12-30612浏览量Java Collection接口在ja...

weixin_30068377的博客 1686

java必备知识库

1.java中sort函数的使用方法的个人总结 2.Java中自定义排序规则 3.java中system.out.printf()所支持的格式化字符串汇总 4.next()和nextLine()的区别详解 5.java数组与字符串相互转换、整型与字符串相互转换【详解】 6.Java大数类用法       java 大数的比较 7.Comparator与Comparable辨析 8.j...

Sean 628

集合、泛型

集合、泛型 集合和数组都是容器,那么他们的区别是什么呢? 数组长度是固定的,集合的长度是可变的。 数组中只能存放同一元素,只可以存放基本数据类型。集合的存储是对象,而且对象的类型可以不一致。 按照存储结构来分,集合可以分为2大类,分别是: 单列集合Collection 双列集合Map 他俩同属于java.util包 Collection集合: 单列集合的根接口,用于存储一系列符合某种规则的元素,他有两个重要的子接口,分别是List和set List特点: 有序,元素可以重复,有索引 主要有:ArrayLis

weixin_43504084的博客 238

java学习中的一些问题

因为我之后要调用collection.sort方法来对student序列进行排序,而这个sort方法将会用到compareTo方法,在具体的sort方法中,将会出现A.compareTo(B)的情景,这是在比较A和B的“大小”关系,并且通过判断A和B的大小关系来判定A和B的先后顺序(因为sort方法使用了归并排序)。但是却是实现相应功能所必不可少的。本例中的this.age-s.age就是这样设计的,可以看出是按照年龄排序,这时若A的年龄大于B的年龄,返回值是正值,不等号的方向相同,所以是升序排列。

qq_46002600的博客 919

Java学习—集合框架

集合框架 JCF:Java Collection Framework 概念 为了解决某一问题,而预先设计的一系列具有继承或实现关系的类接口,在使用过程中,我们只需要选取相应接口与类进行操作就可以完成功能 区分:collection与collections ****前者是接口,后者是 List——列表 特点:线性-有序-外部放入的顺序即为列表存入的顺序,所以有下标

Mr_Cccc的博客 335

Java面试核心:OOP、JVM、集合与并发基础深度解析

面向对象编程(OOP)是软件开发的基石,其核心思想——封装、继承、多态——构成了现代编程语言的设计范式。封装通过隐藏内部实现细节、暴露必要接口来提升代码的安全性和可维护性;继承用于表达类之间的“is-a”关系,但需警惕其带来的高耦合问题,实践中常遵循“组合优于继承”原则;多态则允许程序在运行时动态绑定方法,是设计灵活、可扩展系统的关键。这些原理共同支撑了复杂软件系统的构建,尤其在Java这样的企业级语言中,深刻理解OOP是编写健壮、高效代码的前提。在Java面试中,对OOP三大特性的深度拷问,以及对JVM内

weixin_34348805的博客 394

黑马程序员_集合之单列集合

------- android培训、java培训、期待与您交流!---------- 为什么要有集合? 出现意义:面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。 集合与数组辨析 一.容器长度 1)集合长度可变 2)数组长度固定 二.存储内容类型 1)集合存储引用数据类型 2)数组存储任意类型

liudekun815640232的博客 400
上一篇: 【算法】几种常用排序算法
下一篇: 【JAVA/读书随笔】Chapter 26 二叉查找树(BST)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值