浅析 Comparable 和 Comparator

AUTOSAR Dem模块实战配置:从理论到代码生成的完整指南 本文提供了一份AUTOSAR Dem模块从理论到代码生成的完整实战配置指南。文章详细拆解了配置流程,涵盖Dem模块的核心角色、通用骨架搭建、事件与DTC映射、消抖机制配置,以及与BswM、EcuM、DCM等模块的联调方法,旨在帮助汽车电子工程师快速掌握诊断事件管理的关键配置步骤,生成可运行的代码。 阅读详情

相同点

  • 都是用来实现集合中元素的比较从而进行排序。
  • compare(T o1, T o2) 和 o1.compareTo(o2) 类似,定义排序规则后返回正数,零和负数分别代表大于,等于和小于。
  • 一个类要实现排序功能既可以通过内部实现 Comparable 接口也可以通过外部实现 Comparator 接口。

不同点

  • 接口定义位置不同:
    • java.lang.Comparable
    • java.util.Comparator。
  • 接口中定义方法不同:
    • Comparable 中定义 public int compareTo(T o)。
    • Comparator 中定义 public int compare(T o1, T o2)。
  • 实现排序方式不同:
    • Comparable 相对于内部比较器:通过类实现 Comparable 接口然后在类中重写 compareTo 方法实现排序功能。
    • Comparator 相对于外部比较器:在类外定义 Comparator 接口然后重写 compare 方法用于类比较进而实现排序功能。
  • 侧重点不同:
    • Comparable 一般用于类的自然序,即默认的排序方式。比如学生默认以学号排序。
    • Comparator 则用于定制化排序,即拓展的排序方式。比如学生按照年龄排序。或者为没有实现 Comparable,即没有默认排序方式的类在不改变类自身结构的情况下提供一种比较方式。

示例

示例代码

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Student[] students = new Student[3];
        students[0] = new Student("lucy",21);
        students[1] = new Student("tom",23);
        students[2] = new Student("anna",25);
        // 使用默认的排序方式:以姓名排序
        // 由于实现了Comparable接口,所以可以直接使用Arrays.sort排序
        // Arrays.sort使用Comparable实现的内部比较器
        Arrays.sort(students);
        System.out.println("使用Comparable排序");
        for (Student student : students) {
            System.out.println(student);
        }

        System.out.println("===========================");
        // 使用扩展的排序方式:以年龄升序排序
        // 为Arrays.sort传入一个外部实现的Comparator比较器
        Arrays.sort(students, new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                return Integer.compare(s1.age, s2.age);
            }
        });

        System.out.println("使用Comparator排序");
        for (Student student : students) {
            System.out.println(student);
        }
    }
}

class Student implements Comparable<Student> {
    public String name;
    public int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public int compareTo(Student o) {
        return this.name.compareTo(o.name);
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

示例结果

在这里插入图片描述

【AI智能体】Codex 插件从使用到项目开发实战操作详解 Codex 插件从使用到项目开发实战操作详解 阅读详情

相关推荐

AD21导出gerber文件

文件–>制造输出–>Gerber Files 文件–>制造输出–>Gerber Files 通用、光圈和高级跟第一步一样 3.文件–>制造输出–>NC Drill Files 这个默认就可以了 主要参考视频来自bilibili添加链接描述 此篇博客主要是写给自己好记的,无其他商业用途 ...

新手小杨 1万+

Java Comparator接口和compareto方法总结

compare(Object o1,Object o2)方法是java.util.Comparator接口的方法,它实际上用的是待比较对象的compareTo(Object o)方法。 之前一直搞不清楚自定义的compare的返回值到底怎么处理,一番查询和总结后得到如下结果: compare(Object o1,Object o2)方法中,默认采用的是o1-o2,若o1<o2,返回值为-1;若o1==o2,返回值为0;若o1>o2,返回值为1;而其排序结果是按-1来排序的,即默认为从小到大排序。

GOV_D的博客 2026

零信任架构实战:“持续验证+动态授权”全流程解析(附策略引擎联动图)

《零信任实战指南:7图拆解核心流程与行业案例》摘要:本文通过7张架构图系统解析零信任五大核心流程:强身份认证、设备检查、动态授权、持续监控和自动降权。对比金融(重数据审计)与制造业(重物理绑定)的落地差异,指出三大常见误区及解决方案。数据显示,零信任可使安全响应提速60%,泄露成本降低45%。文章提供6个月实施路线图,强调零信任是"智能信任"体系,建议企业分阶段改造,优先保护核心系统。附赠金融/制造行业策略模板及甘特图示例。(149字)

sara_han的博客 773

Java用CompareTo方法实现根据两个或多个属性对对象进行排序

CompareTo方法 CompareTo是String类的方法,CompareTo(Object o1,Object o2),就是用o1和o2进行比较 o1.compateTo(o2) 大于0 则o1大 o1.compateTo(o2) 小于0 则o2大 o1.compateTo(o2) 等于0 则一样大 升序降序 升序: public static void main(String...

bernardGao94的博客 1837

阿里云大模型ACP认证模拟考试(三)

【摘要】:在阿里云大模型高级工程师 ACP 认证暂无真题题库的现状下,模拟题具有重要意义。其依照真实考试设计,涵盖题型、题量与分值分布,助力考生熟悉考试框架,合理分配答题时间精力,提升效率。同时,模拟题紧扣官方课程,能帮助考生精准定位知识盲点,如大模型架构原理和通义千问应用实践等重点内容,以便针对性完善知识体系。此外,通过练习模拟题,考生可掌握不同题型的解题思维与技巧,快速洞察复杂题目本质,提高答题准确率。

davidkorhenn的博客 3579

基于UWB技术的自动跟随避障系统设计研究

基于UWB技术的自动跟随避障系统设计研究 摘要:目前我国针对自动跟随避障系统方面的研究较少,同时国内自动跟随避障系统仍然处在未成熟阶段,多数仍停留在应用蓝牙控制或摄像头捕捉这类跟随方式,但这类方式在实际应用过程中往往会出现易受干扰,精度差,易受环境干扰等问题,这不仅会降低自动跟随避障系统的性能,同时也会对用户造成诸多困扰。因此,就需要结合目前较为有效的UWB技术,对自动跟随避障系统进行设计。基于此,本文首先将会针对UWB技术展开概述,而后对基于UWB技术的自动跟随避障系统组成展开分析,进而对基于UWB技术的

qq_43543515的博客 7991

Java_集合

集合 集合是JavaAPI中提供的一种容器工具,可以用来存储多个数据。 集合和数组之间的区别有: (1)数组的长度是固定的,集合的长度是可变的; (2)数组中存储的是同一类型的元素,集合中存储的数据可以是不同类型的; (3)数组中可以存放基本类型数据或者对象,集合中只能存放对象; (4)数组是由JVM中现有的类型+[]组合而成的,只有一个length属性,还有从Object中继承过来的方法;集合是由JavaAPI中的java.util包里面所提供的接口和实现类组成的,这里面定义并实现了很多方法,可以使用集合

应付就业 ·· 规划职业? 234

【银河麒麟桌面系统】安装英伟达(NVIDIA)显卡驱动

本文详细介绍了在麒麟桌面操作系统V10 SP1(版本号2503)上安装NVIDIA RTX 5060显卡驱动的完整流程。主要内容包括:查看系统版本信息,从NVIDIA官网下载Linux 64位驱动,授予执行权限后运行安装程序,处理安装过程中的X server警告、32位库安装、DKMS模块选择等问题,以及安装完成后如何验证驱动状态。同时提供了卸载驱动的步骤和常见问题解决方案,如处理X server警告、libglvnd EGL依赖问题等。该指南适用于需要在国产麒麟系统上安装NVIDIA显卡驱动的用户,包含完

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 6312

Java:Java8新特性

1. Lambda表达式 1.1 Lambda表达式的好处 Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递) 使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升 Lambda表达式的本质是:作为函数式接口的实例 1.2 Lambda表达式举例 //导入的包有;import org.junit.Test;import java.util.Comparator; public class Lam.

weixin_44330955的博客 306

Codex 团队如何用自己的产品构建产品——整个 Spec 只有 10 个要点

OpenAI Codex团队采用极简产品开发模式,整个产品规格仅10个要点。团队50-100人长期仅1名PM,设计师代码量已超过工程师。产品负责人Alexander Embiricos透露,团队几乎不写详细文档,仅在需要协调时写简短要点。OpenAI采用独特规划哲学:只做8周内短期或长期方向性规划,拒绝中期路线图。2025年GPT-5.2 Codex发布后,模型能力突破催生了桌面应用开发。团队强调"让离代码最近的人做决策",PM角色转变为"填空者",设计师与工程师界限

347

2025华为杯第二十二届中国研究生数学建模竞赛C题:围岩裂隙精准识别与三维模型重构 - 完整解题分析+完整MATLAB源码!(下篇)

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 1619

java重写compareTo()方法,比较对象的大小

package com.example.demo; /** * 商品类 */ public class Goods implements Comparable{ private String name; private double price; public Goods() { } public Goods(String name, double price) { this.name = name; this.price.

weixin_45654215的博客 1万+

matlab 显示曲面网格【2025最新版】

matlab点云工具箱对点云三维重建结果显示的函数。博客长期更新,本文最近更新时间为:2025年9月14日。

点云侠的博客 2580

浅析 Comparable和 Comparator的区别

简介 Comparable和 Comparator都是java.util包下的两个接口,从字面上看这两个接口都是用来做比较用的,但是jdk里面不可能定义两个功能相同的接口,所以他们肯定有不同的用处。 1、Comparable 1.1 说明 Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些 类是可以和自己比较的,至于具体和另一个实现了Compar...

wlh2015的博客 3万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Comparable与Comparator浅析

  今天博主在翻阅TreeMap的源码,发现其键必须是实现Comparable或者Comparator的接口时产生了一些兴趣,比如在TreeMap中的put方法分别对Comparable和Comparator接口分别进行处理。那么疑问就来了,Comparable和Comparator接口的区别是什么,Java中为什么会存在两个类似的接口?   Comparable和Comparator接口都是用...

朱小厮的博客 2万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

浅析Comparable和Comparator

一.概述 Java 中的排序是由 Comparable 和 Comparator 这两个接口来实现的。 Comparable表示可被排序的,实现该接口的类的对象自动拥有排序功能。 Comparator则表示一个比较器,一般情况, 这个比较器将作为一个参数进行传递。 二.Comparable public interface Comparable<T> { public int...

HU1656的博客 340

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Java——浅析Comparable与Comparator用法

文章目录Comparable与Comparator用法概述ComparableComparator案例总结共同点不同点 Comparable与Comparator用法 概述 Java中对集合对象或者数组对象排序,有两种方法 对象实现Comparable 接口 定义比较器,实现Comparator接口。 Comparable 1.包括实体类与实现comparable重写ComparaTo方法 写...

云祁QI 1246

浅析Java中Comparable与Comparator接口

我们在使用 Arrays.sort, Collections.sort 时会发现,调用该方法的类必须实现 Comparable接口,才能保证方法的正确调用,我们先来看Comparable 接口。 Comparable public interface Comparable<T> { public int compareTo(T o); } This interface impos...

EJoft的博客 429

Java - 浅析 Comparable 和 Comparator

Java - 浅析 Comparable 和 Comparator

业精于勤荒于嬉 371
上一篇: Java fail-fast 机制
下一篇: 使用 HashMap 存一万条数据,构造时传 10000 还会触发扩容吗?
ali48
博客等级 码龄6年 31粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值