Comparator(用于Arrays.sort)

本文介绍了一个使用Java进行数组排序的例子,展示了如何通过自定义比较器Comparator来实现对学生对象数组按不同属性(如编号和成绩)的排序。示例中包含了完整的代码及运行结果。
package snippet;

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

public class ComparatorUse {

    public static void main(String[] args) {
        Student[] persons = new Student[5];
        persons[0] = new Student("tom", 1, 88, 45);
        persons[1] = new Student("jack", 6, 80, 12);
        persons[2] = new Student("bill", 4, 68, 21);
        persons[3] = new Student("kandy", 2, 98, 34);
        persons[4] = new Student("lily", 5, 94, 20);
        System.out.println("排序前的数据:");
        for (Student student : persons) {
            System.out.println(student);
        }
        //这里是关键
        Arrays.sort(persons, new SortByNumber());
        System.out.println("根据学生编号由低到高排序:");
        for (Student student : persons) {
            System.out.println(student);
        }
        //这里是关键
        Arrays.sort(persons, new SortByScore());
        System.out.println("根据学生成绩由高到低排序:");
        for (Student student : persons) {
            System.out.println(student);
        }
    }
    //这里是关键
    static class SortByNumber implements Comparator<Student> {
        @Override
        public int compare(Student o1, Student o2) {
            return o1.getNumber() - o2.getNumber();
        }
    }
    //这里是关键
    static class SortByScore implements Comparator<Student> {
        @Override
        public int compare(Student o1, Student o2) {
            return o2.getScore() - o1.getScore();
        }
    }
}

输出:

排序前的数据:
Student[name:tom,age:45,number:1,score:88]
Student[name:jack,age:12,number:6,score:80]
Student[name:bill,age:21,number:4,score:68]
Student[name:kandy,age:34,number:2,score:98]
Student[name:lily,age:20,number:5,score:94]
根据学生编号由低到高排序:
Student[name:tom,age:45,number:1,score:88]
Student[name:kandy,age:34,number:2,score:98]
Student[name:bill,age:21,number:4,score:68]
Student[name:lily,age:20,number:5,score:94]
Student[name:jack,age:12,number:6,score:80]
根据学生成绩由高到低排序:
Student[name:kandy,age:34,number:2,score:98]
Student[name:lily,age:20,number:5,score:94]
Student[name:tom,age:45,number:1,score:88]
Student[name:jack,age:12,number:6,score:80]
Student[name:bill,age:21,number:4,score:68]

student类:

package snippet;


class Student {
   private String name;
   private int number;
   private int score;
   private int age;

   public Student(String name,int number,int score,int age){
       this.name = name;
       this.number = number;
       this.score = score;
       this.age = age;
   }
   @Override
   public String toString() {      
       return "Student[name:"+name+",age:"+age+",number:"+number+",score:"+score+"]";
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public int getNumber() {
       return number;
   }

   public void setNumber(int number) {
       this.number = number;
   }

   public int getScore() {
       return score;
   }

   public void setScore(int score) {
       this.score = score;
   }

   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       this.age = age;
   }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值