接口使用实例——数组排序

news2025/1/12 12:20:55

对于基本数据类型的大小比较,我们可以使用<,>,=或者equals方法进行比较,但是对象之间如何进行比较呢?要对对象进行比较,我们必须对同一个成员变量进行比较,如我们可以通过比较name的大小来得出两个对象的大小,也可以通过比较age的大小来得出两个对象的大小。

一、对两个对象进行比较

public class Test{
    public static void main(String []args){
            Student student1=new Student("xiaoming",19);
            Student student2=new Student("zhangsan",12);
            System.out.println(student1.compareTo(student2));
    }
}
//首先,我们需要实现一个Comparable接口
class Student implements Comparable<Student>{
    String name;
    int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
//重写接口的抽象方法,在方法中定义比较规则
    public int compareTo(Student o){
        //通过年龄进行比较
        //返回负数表示student1<student2,正数表示student1>student2,0表示student1=student2
        return this.age-o.age;
    }
}

执行结果:

如果要通过姓名进行比较,只需需改compareTo方法里的代码即可

 public int compareTo(Student o){
        //通过姓名进行比较
        return this.name.compareTo(o.name);
    }

二、对多个对象进行比较 

1.使用sort方法对自定义类型数组进行排序

import java.util.Arrays;

public class Test{
    public static void main(String []args){
           Student[] students=new Student[3];
           students[0]=new Student("zhangsan",10);
           students[1]=new Student("lisi",19);
           students[2]=new Student("abc",8);
           System.out.println("排序前:"+ Arrays.toString(students));
           //能不能通过sort方法对Student类型的数组进行排序呢?
           Arrays.sort(students);
           System.out.println("排序后:"+Arrays.toString(students));

    }
}
//首先,我们需要实现一个Comparable接口
class Student implements Comparable<Student>{
    String name;
    int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
//重写接口的抽象方法,在方法中定义比较规则
    public int compareTo(Student o){
        //通过姓名进行比较
        return this.name.compareTo(o.name);
    }
}

可以看到,这里是可以完成排序的,但是可以完成排序的原因是,我们实现了Comparable接口,并重写了compareTo方法,也就是说只要是自定义类型,要进行比较,就必须实现Comparable接口,对compareTo方法进行重写

2.模拟实现sort方法

import java.util.Arrays;

public class Test{
    //向上转型,只要实现了Comparable接口的类都可以使用这个方法进行排序
    public static void mySort(Comparable[] comparables){
        //比较的趟数
        for (int i = 0; i < comparables.length-1; i++) {
            //每一趟比较的次数
            for (int j = 0; j < comparables.length-i-1; j++) {
                //通过compareTo方法来确定要根据对象的那个成员变量来比较大小
                if(comparables[j].compareTo(comparables[j+1])>0)
                {
                    Comparable ret=comparables[j];
                    comparables[j]=comparables[j+1];
                    comparables[j+1]=ret;
                }
            }
        }
    }
    public static void main(String []args){
           Student[] students=new Student[3];
           students[0]=new Student("zhangsan",10);
           students[1]=new Student("lisi",19);
           students[2]=new Student("abc",8);
           System.out.println("排序前:"+ Arrays.toString(students));
           mySort(students);
           System.out.println("排序后:"+Arrays.toString(students));

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

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public int compareTo(Student o){
//如要改为降序排序可以改为o.age-this.age;
        return this.age-o.age;
    }
}

三、Comparator接口(实现比较器)

在上面的例子中,我们发现,如果我们在compareTo方法中比较的是年龄,我们又想比叫姓名,就必须对这段代码进行修改,那么如何做到想对什么进行比较就对什么比较而不用修改代码呢?我们可以实现Comparator接口。

import java.util.Arrays;
import java.util.Comparator;

@SuppressWarnings("ALL")
public class Test{
    public static void main(String []args){
           Student[] students=new Student[3];
           students[0]=new Student("zhangsan",10);
           students[1]=new Student("lisi",19);
           students[2]=new Student("abc",8);
           System.out.println("排序前:"+ Arrays.toString(students));

           AgeComparator ageComparator=new AgeComparator();
           Arrays.sort(students,ageComparator);
           System.out.println("排序后:"+Arrays.toString(students));

           NameComparator nameComparator=new NameComparator();
           Arrays.sort(students,nameComparator);
           System.out.println("排序后:"+Arrays.toString(students));
    }
}
class Student {
    String name;
    int age;

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

}
//定义一个类实现Comparater接口,比较年龄
class AgeComparator implements Comparator<Student>{
    public int compare(Student o1,Student o2){
        return o1.age-o2.age;
    }

}
//定义一个类实现Comparater接口,比较姓名
class NameComparator implements Comparator<Student>{
    public int compare(Student o1,Student o2){
        return o1.name.compareTo(o2.name);
    }

}

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

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

相关文章

四万字长文详解——node.js使用移动云,EOS对象存储

目录 前言 安装及安装前的操作 前置条件 如何创建认证信息 使用npm安装SDK开发包 安装开发包命令 初始化操作 存储桶 查看结果命令 查看桶列表 查看结果命令 删除桶 查看结果命令 创建桶 获取桶列表 判断桶是否存在 查询桶所属地域 查询桶的访问权限 管理桶的…

前后端 | 低代码平台之 Erupt

前文提要 最近大家是不是都有那种危机感&#xff0c;项目变多了&#xff0c;工时压紧了&#xff0c;老板说&#xff0c;我不管你加不加班&#xff0c;我只看结果&#xff0c;项目经理说&#xff0c;我不管你用什么技术栈&#xff0c;我只要没BUG&#xff0c;测试说&#xff0c…

【算法】分治 - 快速排序

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、颜色分类二、排序数组三、数组中的第k个数四、最小的k个数总结 引言 本节主要介绍快速排序&#xf…

类图的六大关系

类图中的六大关系包括&#xff1a;继承关系、实现关系、关联关系、聚合关系、组合关系和依赖关系。 1. 继承关系 继承是一种类与类之间的关系&#xff0c;表示一种泛化和特化的关系。子类继承父类的特性和行为。 class Animal {void eat() {System.out.println("This an…

足球走地全自动化操作软件实现过程

本次采用selenium实现自动化操作的流程 打开浏览器录入账号密码等待数据请求&#xff08;监听&#xff09;有新数据&#xff0c;进行自动化操作通过homeName搜索&#xff0c;找到对应数据找到对应的类型&#xff08;让、大小…&#xff09;找到对应的盘口输入数量提交 附登录…

系统资源监控器工具glances的使用详解

目录 1、glances工具介绍 2、安装方式 3、glances的工具界面说明 4、常用的参数选项 5、常用快捷键说明 1、glances工具介绍 glances可以分析系统的 CPU使用率、内存使用率、内核统计信息和运行队列信息磁盘I/O速度、传输和读/写比率、磁盘适配器网络I/O速度、传输和读/写…

华为编程题目(实时更新)

1.大小端整数 计算机中对整型数据的表示有两种方式&#xff1a;大端序和小端序&#xff0c;大端序的高位字节在低地址&#xff0c;小端序的高位字节在高地址。例如&#xff1a;对数字 65538&#xff0c;其4字节表示的大端序内容为00 01 00 02&#xff0c;小端序内容为02 00 01…

电脑远程控制另一台电脑怎么弄?

可以远程控制另一台电脑吗&#xff1f; “你好&#xff0c;我对远程访问技术不太了解。现在&#xff0c;我希望我的朋友可以远程控制我的Windows 10电脑&#xff0c;以便她能帮我解决一些问题。请问&#xff0c;有没有免费的方法可以实现这种远程控制&#xff1f;我该如何操作…

如何选择一个最强大模型-看最硬核排名了!

Chatbot Arena由伯克利大学主导团队 LMSYS Org 发布了一个针对大语言模型的基准平台 Chatbot Arena。该平台采用匿名、随机的方式让不同的大模型产品进行对抗评测&#xff0c;基于国际象棋等竞技游戏中广泛使用的埃洛等级分系统&#xff0c;通过用户投票产生&#xff0c;系统每…

基于SpringBoot的网盘系统设计与实现

第1章 绪论... 1 1.1 研究背景与意义... 1 1.1.1 研究背景... 1 1.1.1 研究意义... 1 1.2 国内外研究现状... 2 1.2.1 国内研究现状... 2 1.2.2 国外研究现状... 3 1.3 论文组织架构... 4 第2章 关键技术介绍... 5 2.1 SpringBoot. 5 2.2 MySQL数据库... 5 2.3 MVC架…

区块链论文总结速读--CCF A会议 USENIX Security 2024 共7篇 附pdf下载

Conference&#xff1a;33rd USENIX Security Symposium CCF level&#xff1a;CCF A Categories&#xff1a;网络与信息安全 Year&#xff1a;2024 Num&#xff1a;7 1 Title: Practical Security Analysis of Zero-Knowledge Proof Circuits 零知识证明电路的实用安全…

对AI 感兴趣的小伙伴

如图&#xff0c;欢迎来玩儿&#xff01; 欢迎来玩儿

备考AMC8和AMC10竞赛,吃透2000-2024年1850道真题和解析(持续)

多做真题&#xff0c;吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一&#xff0c;通过做真题&#xff0c;可以帮助孩子找到真实竞赛的感觉&#xff0c;而且更加贴近比赛的内容&#xff0c;可以通过真题查漏补缺&#xff0c;更有针对性的补齐知识的短板。 今天我们继续…

嵌入式学习——3——UDP TFTP简易文件传输

tftp协议概述 简单文件传输协议&#xff0c;适用于在网络上进行文件传输的一套标准协议&#xff0c;使用UDP传输 特点&#xff1a; 是应用层协议 基于UDP协议实现 数据传输模式 octet&#xff1a;二进制模式&#xff08;常用&#xff09; mail&#xff1a;已经不再支持 TFTP通信…

ping 探测网段哪些地址被用

#!/bin/bash# 遍历192.168.3.1到192.168.3.254 for i in {1..254} doip"192.168.3.$i"# 对每个IP地址进行三次ping操作if ping -c 3 -W 1 $ip > /dev/null 2>&1thenecho "$ip: yes"fi done$ sh test.sh 192.168.3.1: yes 192.168.3.95: yes 192.…

Terminal Web终端基础(Web IDE 技术探索 二)

Terminal是web终端技术&#xff0c;类似cmd命令窗口&#xff0c;Webcontainer 中推荐使用的是Xterm.js&#xff0c;这里就不细说Xterm.js 的使用了&#xff0c;我们使用第三方库来实现&#xff08;原生确实有点难用&#xff09;。 vue-web-terminal 一个由 Vue 构建的支持多内容…

基础5 探索JAVA图形编程桌面:字符操作组件详解

在繁华都市的一个角落&#xff0c;卧龙和凤雏相聚在他们常去的台球厅。灯光洒在绿色的台球桌上&#xff0c;彩色的台球整齐地排列着&#xff0c;仿佛在等待着一场激烈的角逐。 卧龙轻轻地拿起球杆&#xff0c;微微瞄准&#xff0c;然后用力一击&#xff0c;白球带着一股强大的力…

MySQL 高阶语句(二)

一、子查询 子查询也被称作内查询或者嵌套查询&#xff0c;是指在一个查询语句里面还嵌套着另一个查询语句。子查询语句是先于主查询语句被执行的&#xff0c;其结果作为外层的条件返回给主查询进行下一 步的查询过滤。PS: 子语句可以与主语句所查询的表相同&#xff0c;也可以…

Python异常处理:打造你的代码防弹衣!

Hi&#xff0c;我是阿佑&#xff0c;上文咱们讲到——揭秘Python的魔法&#xff1a;装饰器的超能力大揭秘 ‍♂️✨&#xff0c;阿佑将带领大家通过精准捕获异常、使用with语句和上下文管理器、以及异常链等高级技巧来增强代码的健壮性。就像为代码穿上防弹衣&#xff0c;保护它…

微调Llama3实现在线搜索引擎和RAG检索增强生成功能

视频中所出现的代码 Tavily SearchRAG 微调Llama3实现在线搜索引擎和RAG检索增强生成功能&#xff01;打造自己的perplexity和GPTs&#xff01;用PDF实现本地知识库_哔哩哔哩_bilibili 一.准备工作 1.安装环境 conda create --name unsloth_env python3.10 conda activate …