Java中Comparable与Comparator适用场景与区别

本文详细介绍了Java中Comparable接口和Comparator接口的区别与应用场景。Comparable接口用于实现对象的自然排序,通过重写compareTo方法。Comparator接口则允许外部类定义排序规则,避免修改原有代码,适合多种排序需求。文中通过实例展示了如何在实际开发中使用这两个接口进行排序操作。
摘要由CSDN通过智能技术生成

了解了并总结了一下该知识盲区,在今后的开发工作中遇到合适的场景刚好能用得上

(1)先看Comparable接口

官方文档:
https://tool.oschina.net/apidocs/apidoc?api=jdk-zh
在这里插入图片描述

简单点说,就是通过实现该接口,使类具有“自然排序”的功能,先拿简单的类型Integer和String做实验

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

可以看到strArray和intArray都是两组乱序的数组,在调用Arrays.sort之后,再打印输出,就变成了有序的了。根据这个sort方法点击进入:

在这里插入图片描述
有一个countRunAndMakeAscending方法,我们定义的Object[ ] a数组传进来后,就是在这里一个个遍历并且进行比较排序,其中调用的正是Comparable接口的compareTo方法。而这个Comparable接口,是由对应的Object类来实现的。
关于Comparable接口的部分说明如下:
在这里插入图片描述
在这里插入图片描述

小于返回负整数,相等返回零,大于则返回正整数,以返回的数值来决定两个元素的先后次序关系,实现该接口,就重写compareTo方法,实现不同类的不同比较逻辑

(1)先看String实现的compareTo方法的比较逻辑是什么:

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

先是比较两串String的长度,如果长度不一致,返回差值,如果长度一致,则逐个比较字符,字符不一致,就返回这两个字符的Ascii码差值。例如:
Aa 与 Ae 做compareTo,长度一致,开始逐个字符比较,A一致,a e 不一致,则返回101(e)-97(a),证明Aa小于Ae,这样就能把String[ ]完成自然排序了

(2)接下来看Integer的

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

Integer的比较逻辑就简单多了,因为都是整型,直接比较即可

(3)实际应用

了解完它基本原理,接下来假设一个小需求:第一优先录取年龄最小的学生,年龄相同情况下录取成功高的学生
思路分析:有一个List,里面装满了Demo类,Demo类有三个参数,姓名,年龄,成绩,需求就是先按照年龄从小到大进行排序,年龄相同的话再按照从大到小成绩进行排序

public class Demo {
   
    private String name;
    private int age;
    private double score;

    // 带参构造方法
    public Demo(String</
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值