news 2026/4/15 12:02:31

java接口:对象排序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java接口:对象排序

当我们实例化了大量的学生对象,此时需要对学生对象进行排序,我们可以定义一个学生类型的数组,并将顺序存储进入数组中。我们知道Java有定义一个冒泡排序的方法sort(),我们能否直接通过该方法进行对学生对象的排序呢?

import java.util.Arrays;
class Student {
public Student(String name, int age) {
this.name = name;
this.age = age;
}

String name;
int age;
}
public class Test {
public static void main(String[] args) {
Student student1=new Student("zhangan",12);
Student student2=new Student("liangan",28);
Student student3=new Student("kaugan",17);
Student[]students=new Student[3];
students[0]=student1;
students[1]=student2;
students[2]=student3;
for(Student student:students)
{
System.out.println(student);
}
Arrays.sort(students);
for(Student student:students)
{
System.out.println(student);
}

}
}

我们可以发现,直接编译报错了

在调用sort()方法时,该方法底层会调用compareTo()方法进行比较,而compareTo()方法是在Comparable接口底下的方法,我们当前都没有实现Comparabe<>接口,怎么能够强制转化为Comparable类型?因此我们需要在学生类当中实现Comparable。

此时我们实现了Comparable,后面的代表泛型,证明比较的是Student这个类,此时还需要重写compareTo()方法,赋予比较规则。此时我们可以设定比较的规则,是按照姓名来比较还是按照成绩高低来比较,比如我们设定年龄来比较

我们可以自己尝试编写sort()方法,用自己的方法实现排序过程,小小冒泡。

public static void bubble(Student[] student){
for (int i = 0; i < student.length; i++) {
for (int j = 0; j < student.length - 1 - i; j++) {
if(student[j].compareTo(student[j + 1]) > 0) {
Student tmp = student[j];
student[j] = student[j + 1];
student[j + 1] = tmp;
}
}
}
}

但是我们仔细观察,好像不是很方便,因为现在是按年龄大小低进行排序,如果明天我想要按照姓名来排序呢?直接更改代码吗?不合适当我们的代码投入使用了之后,会产生数据,如果对当前已经投入使用的代码进行更改,有可能会导致连锁反应的出现,导致出现其他的错误。那么这个时候我们可以使用sort()方法的重载方法更换底层,将sort()方法的比较方法更换为Comparetor接口底下的compare()方法

我们可以再创建另外一个类来重写另外一个规则:按照姓名来排序

public class namesort implements Comparator<Student> {

@Override
public int compare(Student o1, Student o2) {
return o1.score - o2.score;
}
}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 12:00:24

你的CPS只有7?试试这5个提升鼠标点击速度的训练技巧和工具推荐

从7 CPS到职业级手速&#xff1a;5个科学训练技巧与工具全解析 你是否在《我的世界》PVP对战中总是慢人一步&#xff1f;或是在FPS游戏中因手速不足错失关键击杀&#xff1f;CPS&#xff08;每秒点击次数&#xff09;作为衡量操作效率的核心指标&#xff0c;直接决定了游戏中的…

作者头像 李华
网站建设 2026/4/15 12:00:10

Telnet客户端在Windows下的隐藏技巧:从安装到实战测试SMTP服务

Telnet客户端在Windows下的隐藏技巧&#xff1a;从安装到实战测试SMTP服务 在Windows系统中&#xff0c;Telnet客户端就像一位低调的网络安全专家&#xff0c;默默隐藏在系统深处等待被唤醒。这个看似古老的工具&#xff0c;实际上在网络诊断和服务测试中依然发挥着不可替代的作…

作者头像 李华
网站建设 2026/4/15 11:59:12

3步解锁Audiveris:从乐谱照片到数字音乐的智能转换秘籍

3步解锁Audiveris&#xff1a;从乐谱照片到数字音乐的智能转换秘籍 【免费下载链接】audiveris Latest generation of Audiveris OMR engine 项目地址: https://gitcode.com/gh_mirrors/au/audiveris 还在为整理纸质乐谱而烦恼吗&#xff1f;想要将那些珍贵的音乐手稿快…

作者头像 李华
网站建设 2026/4/15 11:52:14

Nomic-Embed-Text-V2-MoE模型部署之网络配置基础:内网穿透与端口映射

Nomic-Embed-Text-V2-MoE模型部署之网络配置基础&#xff1a;让本地服务安全“走出去” 你费了好大劲&#xff0c;终于在本地服务器上把Nomic-Embed-Text-V2-MoE模型服务跑起来了。看着终端里“服务启动成功”的提示&#xff0c;你满心欢喜&#xff0c;准备大展拳脚。结果&…

作者头像 李华