首页 > 编程语言 >闲说: Java 中Comparable 和 Comparator 的区别

闲说: Java 中Comparable 和 Comparator 的区别

时间:2024-06-18 18:43:21浏览次数:25  
标签:闲说 Comparable Java Comparator students Student new 排序

共同点

  1. Comparable 和 Comparator 他们都可以实现集合的排序功能;

区别

  1. Comparable 被实现类实现后, 需要重写compareTo方法, 方可使用Collections/Arrays工具类提供的排序方法进行排序;
  2. Comparator 被实现类实现后, 也可以重写compare方法, 这个方法虽然能返回两个对象的大小关系,但是没有和其他排序工具进行关联;
  3. Comparator 提供使用匿名内部类的实现方式实例化一个比较器对象, 作用是支持集合对象的实例方法sort(),从而达到对集合的排序目的;
    代码如下:
public class Test {
    public static void main(String[] args) {
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("tom", 23));
        students.add(new Student("jerry", 55));
        students.add(new Student("jack", 80));
        students.add(new Student("jane", 45));

        students.sort((s1, s2) -> s1.getAge() - s2.getAge());
        System.out.println(students);
    }
}

其中,Student类并未实现Comparable接口, 所以无法使用Collections/Array的sort方法进行集合排序 --- 这点很重要. 所以只能用实现一个比较器对象的方式进行排序了.
所以从这一点可以看出, Comparable主要是对于设计类时使用, 当我们无法对类进行修改时, 我们可以使用Comparator的方式实现相同的目的;

标签:闲说,Comparable,Java,Comparator,students,Student,new,排序
From: https://www.cnblogs.com/zhangyuzhijia/p/18254871

相关文章

  • 数据结构与算法-红黑树的java实现-构建红黑树
    红黑树红黑树是一种二分查找树,与普通的二分查找树不同的一点是,红黑树的每个节点都有一个颜色(color)属性。该属性的值要么是红色,要么是黑色。通过限制从根到叶子的任何简单路径上的节点颜色,红黑树确保没有比任何其他路径长两倍的路径,从而使树近似平衡。节点红黑树的节......
  • 计算机Java项目|房屋租赁管理系统的设计与实现
    作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助收藏点赞不迷路 ......
  • 揭秘ThreadPoolExecutor:深度解析Java线程池的艺术与源码之美
    1.线程池概述在Java中,线程池(ThreadPool)是一种管理线程的技术,通过预先创建并管理一组线程,来减少频繁创建和销毁线程所带来的开销,从而提高系统的响应速度和吞吐量。ThreadPoolExecutor是Java并发包java.util.concurrent中的一个核心类,它提供了丰富的线程池功能。2.Thread......
  • JavaScript 的Blob 对象详解
    JavaScript的Blob对象详解:https://blog.csdn.net/qq_41152573/article/details/136225387?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171870454816800227415776%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=17187045481680......
  • 详谈JavaScript 二进制家族:Blob、File、FileReader、ArrayBuffer、Base64
    详谈JavaScript二进制家族:Blob、File、FileReader、ArrayBuffer、Base64:https://blog.csdn.net/weixin_43025151/article/details/129743443?ops_request_misc=&request_id=&biz_id=102&utm_term=JavaScript%E4%B8%AD%E7%9A%84Blob%E4%BD%A0%E7%9F%A5%E9%81%93%E5%A4%9A%E......
  • 毕业设计:人事管理系统,基于java+springboot+mysql
     一、前言介绍          困扰管理层的许多问题当中,人事管理是一定不敢忽视的一块。但是管理好人事又面临很多麻烦需要解决,例如有几个方面:第一,公司往往员工人数都比较多,如何保证能够管理到每一员工;第二,如何在工作琐碎,记录繁多的情况下将人事变动的情况反应......
  • Flink1.17.0-报错: java.lang.NoSuchMethodError: org.apache.kafka.clients.admin.De
    背景:启动Flink的sql-client.sh,创建Kafka的source端表,然后查询Kafka的数据时报错。报错信息:2024-06-1816:10:12org.apache.flink.util.FlinkException:GlobalfailuretriggeredbyOperatorCoordinatorfor'Source:kafka_rmc_cust_analog_u[1]'(operatorbc764cd8ddf7a0c......
  • java freemarker实现单元格动态合并
    在Java项目中,使用FreeMarker模板引擎来动态生成Excel文件,并实现单元格的动态合并(特别是行合并)。可以通过以下步骤来完成:1.准备数据模型        需要准备一个合适的数据模型,该模型应能表示出哪些单元格需要合并。        例如,如果想要根据某一列的值来决定......
  • 采用java语言+Redis+RabbitMQ开发的 门诊his系统源码 一站式的门诊his系统 门诊业务流
    采用java语言+Redis+RabbitMQ开发的门诊his系统源码一站式的门诊his系统门诊业务流程医院信息系统(HIS系统)门诊业务是医院信息化建设的重要组成部分之一,它涵盖了医院门诊部门涉及的各项业务。HIS系统门诊业务的实施,可以实现医院门诊业务的信息化管理和数据化处理,提高医疗服......
  • Javaweb实训太难不会做,哪里有代做Javaweb实训的?
    需要代做请发布需求**要接单:https://www.yaojiedan.com**理解基本概念:深入研究Web开发的基础,包括网络协议、Web应用的生命周期、MVC(模型-视图-控制器)架构模式等。理解浏览器和服务器之间的通信是如何进行的,以及它们是如何通过HTML、CSS和JavaScript进行交互的。学习......