Java接口实现排序
创始人
2025-05-29 07:24:41

一、排序需求

当我们有一个学生类,我们属性有姓名,年龄,分数。我们想分别根据属性来将学生进行排序。

因为学生是引用类型,肯定不能这样比较:

if (student1 > student2){System.out.println("student1 > student2");
}

于是,我们通过接口Comparator来实现

二、用法

需要将哪个类排序,就让哪个类实现接口ComparableT写类名

然后再重写接口的compareTo(类名 o)方法

1、以按年龄排序为例: 

import java.util.Arrays;
class Student implements Comparable{ //实现了Comparable接口String name;int age;double score;public Student(String name, int age, double score) {this.name = name;this.age = age;this.score = score;}@Override   //重写了Comparable接口中的compareTo方法public int compareTo(Student o) {if(this.age > o.age){return 1;} else if (this.age == o.age) {return 0;}else {return -1;}}
}
public class TestDemo {public static void main(String[] args) {Student[] students = new Student[3];students[0] = new Student("小明",18,98.3);students[1] = new Student("小红",17,92.1);students[2] = new Student("小华",19,88.3);Arrays.sort(students); //实现排序System.out.println(Arrays.toString(students));}
}

也可以这样重写

 @Override   //重写了Comparable接口中的compareTo方法public int compareTo(Student o) {return this.age - o.age ; //从小到大排序}

2、根据分数排序

在重写方法时,因为返回值是int类型的,而分数是double类型的,需要强制转换

@Override   //重写了Comparable接口中的compareTo方法public int compareTo(Student o) {return (int)(this.score - o.score) ; //因为返回值是int类型的,而分数是double类型的,需要强制转换}

3、根据姓名首字母排序

因为字母不能相减,因此需要用到String中自带的compareTo方法

 @Override   //重写了Comparable接口中的compareTo方法public int compareTo(Student o) {return this.name.compareTo(o.name);}

 三、比较器

因为一个类,实现了了Comparable接口,只能有一个重写的方法,对类的侵入性太强。

可以通过比较器来实现通过不同的属性进行排序

1、语法

写一个比较器类,实现Comparator比较器接口,重写方法

 年龄比较器:

class AgeComparator implements Comparator{ //年龄比较器@Overridepublic int compare(Student o1, Student o2) { //重写方法return o1.age - o2.age;}
}

 分数比较器:

class ScoreComparator implements Comparator{  //分数比较器@Overridepublic int compare(Student o1, Student o2) {return (int)(o1.score - o2.score);}
}

姓名首字母比较器: 

class NameComparator implements Comparator{ //姓名首字母比较器@Overridepublic int compare(Student o1, Student o2) {return o1.name.compareTo(o2.name);}

2、用法:实例化比较器类

public class TestDemo {public static void main(String[] args) {Student[] students = new Student[3];students[0] = new Student("mo",18,98.3);students[1] = new Student("ll",17,92.1);students[2] = new Student("nn",19,88.3);AgeComparator ageComparator = new AgeComparator();Arrays.sort(students,ageComparator);}
}

相关内容

热门资讯

故... 如今,凯叔讲故事会员服务现已全面上线。 作为一个累计用户数超6000万的高纯度亲子聚会平台,能够收到...
关... 会计人员在会计工作中经常使用关家坡财务软件。 关家坡软件现已广泛使用。 在使用过程中难免会遇到一些问...
真... 真诚服务,共创未来专为实现成本效益而设计的平台如果无法检测到加密锁怎么办1)在线授权操作步骤:插入锁...
什...        凤翔软件集合了中国财经名博“鲁山狼”老师的核心技术,由北京新秀软件公司开发的一款超级简...
《... 老会计师都说:“要成为一名合格的会计师,必须学会熟练使用金蝶财务软件”。据统计,国内70%的企业使用...