【Java】通过Comparator比较器的方式给对象数组排序

简介: 【Java】通过Comparator比较器的方式给对象数组排序

上篇文章我们学习了通过重写compareTo()方法给对象数组排序(链接:http://t.csdn.cn/i5GfS)可是这种方法也有缺点,就是不太灵活,太固定了。如果我们学生类不实现comparable接口能不能做到非常灵活的实现排序呢?我们还有另一种方法:比较器

我们定义另一个类实现另一个接口,然后实现里面的抽象方法。



然后我们可以看到 Arrays.sort()源码中有这样一个方法:



这个方法可以传两个参数。又因为我们的AgeComparator实现了 Comparator接口,那我们就可以这样写一个比较器作为第二个参数:



这样我们就可以完成对年龄的排序:



我们会发现现在是单独的一个类,不会对Student类进行修改 。

同样我们可以再实现几个,比如成绩的比较器:


这样就是实现了对成绩排序。

本篇完整代码:

package csdn;
 
import java.util.Arrays;
import java.util.Comparator;
 
class  Student  {
    public  String name;
    public  int age;
    public  int score;
    public Student(String name, int age, int score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                '}';
    }
 
 
}
class  AgeComparator implements Comparator<Student>{
    @Override
    public int compare(Student o1, Student o2) {
        return o1.age-o2.age;
    }
}
class  ScoreComparator implements Comparator<Student>{
    @Override
    public int compare(Student o1, Student o2) {
        return o1.score-o2.score;
    }
}
public class test {
    public static void main(String[] args) {
        Student[] students=new Student[4];
        students[0]=new Student("zhangsan",10,19);
        students[1]=new Student("lisi",8,78);
        students[2]=new Student("wangwu",15,57);
        students[3]=new Student("zhaoliu",11,57);
        AgeComparator ageComparator=new AgeComparator(); //比较器
        Arrays.sort(students,ageComparator);//按年龄排
        ScoreComparator scoreComparator=new ScoreComparator(); //比较器
        Arrays.sort(students,scoreComparator);//按成绩排
}
}

 

目录
相关文章
|
2天前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
|
4天前
|
Java
Java基础之对象的引用
Java基础之对象的引用
6 0
|
9天前
|
Java
Java中如何克隆一个对象?
【4月更文挑战第13天】
15 0
|
10天前
|
Java API 数据库
深入解析:使用JPA进行Java对象关系映射的实践与应用
【4月更文挑战第17天】Java Persistence API (JPA) 是Java EE中的ORM规范,简化数据库操作,让开发者以面向对象方式处理数据,提高效率和代码可读性。它定义了Java对象与数据库表的映射,通过@Entity等注解标记实体类,如User类映射到users表。JPA提供持久化上下文和EntityManager,管理对象生命周期,支持Criteria API和JPQL进行数据库查询。同时,JPA包含事务管理功能,保证数据一致性。使用JPA能降低开发复杂性,但需根据项目需求灵活应用,结合框架如Spring Data JPA,进一步提升开发便捷性。
|
14天前
|
存储 Java 编译器
对象的交响曲:深入理解Java面向对象的绝妙之处
对象的交响曲:深入理解Java面向对象的绝妙之处
47 0
对象的交响曲:深入理解Java面向对象的绝妙之处
|
19天前
|
Java 索引
Java练习题-用冒泡排序法实现数组排序
Java练习题-用冒泡排序法实现数组排序
14 2
|
20天前
|
Java
在Java中,多态性允许不同类的对象对同一消息做出响应
【4月更文挑战第7天】在Java中,多态性允许不同类的对象对同一消息做出响应
17 2
|
28天前
|
Java
Java常用封装Base对象
Java常用封装Base对象
8 0
|
4天前
|
安全 Java 调度
Java线程:深入理解与实战应用
Java线程:深入理解与实战应用
23 0
|
1天前
|
缓存 Java
Java并发编程:深入理解线程池
【4月更文挑战第26天】在Java中,线程池是一种重要的并发工具,它可以有效地管理和控制线程的执行。本文将深入探讨线程池的工作原理,以及如何使用Java的Executor框架来创建和管理线程池。我们将看到线程池如何提高性能,减少资源消耗,并提供更好的线程管理。