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

对于基本数据类型的大小比较,我们可以使用<,>,=或者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=student2return 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.mzph.cn/news/840364.shtml

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

相关文章

python-数据可视化

python-数据可视化 ** 数据可视化指的是通过可视化表示来探索数据&#xff0c;它与数据挖掘**紧密相关&#xff0c;而数据挖掘指的是使用代码来探索数据集的规律和关联。数据集可以是用一行代码就能表示的小型数字列表&#xff0c;也可以是数以吉字节的数据 最流行的工具之一…

【一步一步了解Java系列】:何为数组,何为引用类型

看到这句话的时候证明&#xff1a;此刻你我都在努力加油陌生人个人主页&#xff1a;Gu Gu Study专栏&#xff1a;一步一步了解Java 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 数组 数组是一推相同数据…

数据迁移利器登场!Elasticdumpv6.110震撼发布,助你轻松搬迁大数据!

简介 Elasticdump 是一个用于导出和导入 Elasticsearch 数据的工具。它能够从一个 Elasticsearch 集群读取数据并写入到另一个 Elasticsearch 集群、文件系统或其他数据存储&#xff08;例如 S3&#xff09;。这个工具非常有用&#xff0c;特别是在进行数据迁移、备份和恢复操作…

2024年学浪视频怎么下载到手机相册

随着2024年的到来&#xff0c;学浪平台继续为广大学习者提供优质的在线教育资源。然而&#xff0c;如何将这些宝贵的视频内容下载到手机相册&#xff0c;方便随时离线观看呢&#xff1f;无论您是想在旅途中学习&#xff0c;还是希望在没有网络的情况下复习课程&#xff0c;本文…

1106 2019数列

solution 维护长度为4的数组&#xff0c;对于第四位之后的数字&#xff0c;为所维护数组的所有元素之和 的个位数 #include<iostream> using namespace std; int main(){int n, a[4] {2, 0, 1, 9}, cnt 0, d;scanf("%d", &n);for(int i 0; i < n; …

kettle从入门到精通 第六十三课 ETL之kettle kettle调用python脚本的两种方法

想真正学习或者提升自己的ETL领域知识的朋友欢迎进群&#xff0c;一起学习&#xff0c;共同进步。若二维码失效&#xff0c;公众号后台加我微信入群&#xff0c;备注kettle。 kettle中不能直接调用python脚本&#xff0c;可以通过shell脚本和http进行调用pyton服务。 一、shel…

深入理解Java的垃圾回收机制(GC)实现原理

深入理解Java的垃圾回收机制&#xff08;GC&#xff09;实现原理 Java的垃圾回收机制&#xff08;Garbage Collection, GC&#xff09;是其内存管理的核心功能之一。通过GC&#xff0c;Java自动管理对象的生命周期&#xff0c;回收不再使用的对象所占的内存空间。本文将详细探…

Golang | Leetcode Golang题解之第97题交错字符串

题目&#xff1a; 题解&#xff1a; func isInterleave(s1 string, s2 string, s3 string) bool {n, m, t : len(s1), len(s2), len(s3)if (n m) ! t {return false}f : make([]bool, m 1)f[0] truefor i : 0; i < n; i {for j : 0; j < m; j {p : i j - 1if i >…

C++的数据结构(十八):并查集

并查集&#xff08;Union-Find&#xff09;是一种用于处理一些不交集&#xff08;Disjoint Sets&#xff09;问题的数据结构。它主要支持两种操作&#xff1a;合并集合&#xff08;Union&#xff09;和查找元素所属集合&#xff08;Find&#xff09;。在解决诸如连通性问题、网…

牛客小白月赛94( 6 / 6 )

小苯的九宫格 #include<bits/stdc.h> using namespace std; map<int,int>mp; void solve(){for(int i1;i<9;i){int x;cin>>x;mp[i]x;}string s;cin>>s;for(auto i:s){cout<<mp[i-0];} } int main(){ios::sync_with_stdio(false), cin.tie(0)…

Ruoyi框架学习——权限管理

权限分类 菜单权限&#xff1a;用户登录系统之后能看到哪些菜单按钮权限&#xff1a;用户在一个页面上能看到哪些按钮&#xff0c;比如新增、删除等按钮接口权限&#xff1a;用户带着认证信息请求后端接口&#xff0c;是否有权限访问&#xff0c;该接口和前端页面上的按钮一一对…

AI生成内容检测|Fast-DetectGPT:通过条件概率曲率对机器生成文本进行有效的零样本检测

【摘要】大型语言模型 (LLM) 已显示出生成流畅且有说服力的内容的能力&#xff0c;这既带来了生产力机会&#xff0c;也带来了社会风险。要构建值得信赖的 AI 系统&#xff0c;必须区分机器生成的内容和人类创作的内容。领先的零样本检测器 DetectGPT 展示了值得称赞的性能&…

Github 2024-05-25 Rust开源项目日报Top10

根据Github Trendings的统计,今日(2024-05-25统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Svelte项目1TypeScript项目1Python项目1Go项目1Dart项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust…

建筑工程乙级资质全面解析:设计能力与业务范畴

建筑工程乙级资质全面解析&#xff1a;设计能力与业务范畴 建筑工程乙级资质是中国建筑业中一项重要的资质认证&#xff0c;标志着设计单位具备一定规模和水平的专业技术力量&#xff0c;能够在限定范围内承担建筑设计及相关工程服务。本文将深入解析乙级资质的设计能力与业务…

如果有多个文件夹,怎么快速获得文件夹的名字呢

上一篇写到怎么批量建立文件夹&#xff0c;那么怎么获取批量文件夹的名字呢&#xff1f; 一、啊这&#xff0c;这真是一个好问题二、这个得用Python&#xff08;文本末尾有打包程序&#xff0c;点击链接运行就可以了&#xff09;&#xff08;1&#xff09;首先建立一个py文件&a…

博客系统(Servlet实现)

目录 1.准备工作 2.数据库设计 2.1表设计 2.2封装数据库操作代码 2.3创建 Blog 类 和 User 类 2.4创建 BlogDao 类和 UserDao 类 3.读取博客列表功能 3.1约定前后端交互接口 3.2实现服务器代码 3.3实现客户端代码 4.实现博客详情 4.1约定前后端交互接口 4.2实现服…

AGI技术与原理浅析:曙光还是迷失?

前言&#xff1a;回顾以往博客文章&#xff0c;最近一次更新在2020-07&#xff0c;内容以机器学习、深度学习、CV、Slam为主&#xff0c;顺带夹杂个人感悟。笔者并非算法科班出身&#xff0c;本科学制药、研究生学金融&#xff0c;最原始的算法积累都来源于网络&#xff0c;当时…

Android android.os.DeadObjectException aidl通信异常分析及解决

问题描述 做一款音乐播放应用&#xff0c;播放服务是通过AIDL形式对外暴露&#xff0c;允许跨进程调用且多个App同时操作音乐播放&#xff0c;偶现android.os.DeadObjectException问题 12-15 09:28:12.371: W/System.err(5412): android.os.DeadObjectException 12-15 09:28:…

乡村振兴与乡村文化传承创新:保护和传承乡村文化,推动乡村文化创新发展,打造具有文化魅力的美丽乡村

一、引言 在当代中国&#xff0c;乡村振兴已成为国家发展的重要战略之一。乡村不仅是自然资源的富集地&#xff0c;更是中华优秀传统文化的发源地。保护和传承乡村文化&#xff0c;推动乡村文化创新发展&#xff0c;对于打造具有文化魅力的美丽乡村&#xff0c;实现乡村全面振…

SSMP整合案例第三步 业务层service开发及基于Mybatis的接口功能拓展

业务层开发 对于业务层的制作有个误区 Service层接口定义与数据层接口定义具有较大差别 不要混用 业务层接口关注的是业务名称 数据层接口关注的是数据层名称 操作是不难 但是有些东西还是要掌握的 业务层接口如果是业务方法 就按照业务名称来代替 如果是数据操作 直接用…