关于比较器,我们知道我们java数组中可以使用一个方法:Array.sort(array);来进行排序

本文介绍如何使用Java的Comparator接口对自定义对象数组进行排序,通过示例展示了如何根据对象的不同属性(如id或age)创建不同的比较器,实现灵活排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于比较器,我们知道我们java数组中可以使用一个方法:Array.sort(array);来进行排序,如果我们数组中是放的基本数据类型,就可以直接比较大小排序,如果我们放的是对象的话,这样排序就意义不大,需要我们自己进行相应的修改,得到我们想要的比较结果。

比如我们有三个学生,学生属性有id,name,age,我们可以使用id来排序,也可以使用age来排序。两者结果是不一样的。下边我们来实现这个功能

下边会涉及到comparator接口(不懂的同学可以去查询一下comparable和comparator的区别):

package 比较器;

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

public class ComparatorTest {
	public static class Student {
		private int id;
		private String name;
		private int age;

		public Student(int id, String name, int age) {
			this.id = id;
			this.name = name;
			this.age = age;
		}

		@Override
		public String toString() {
			return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
		}
		
	}
//这里是比较器1,是利用id来进行比较
	public static class IdComparator implements Comparator<Student> {

		@Override
		public int compare(Student o1, Student o2) {
			// TODO Auto-generated method stub
			return o1.id - o2.id;
		}

	}
//这里是比较器2,是利用age来进行比较
	public static class AgeComparator implements Comparator<Student> {

		@Override
		public int compare(Student o1, Student o2) {
			// TODO Auto-generated method stub
			return o1.age - o2.age;
		}

	}

	public static void main(String[] args) {
		Student s1 = new Student(1, "小红", 12);
		Student s2 = new Student(3, "小张", 10);
		Student s3 = new Student(2, "小王", 8);
		Student[] sArray =  { s1, s2, s3 };
		Arrays.sort(sArray,new IdComparator());
		for(int i=0;i<sArray.length;i++){
			System.out.println(sArray[i]);
		}
		System.out.println("----------------------------");
		Arrays.sort(sArray,new AgeComparator());
		for(int i=0;i<sArray.length;i++){
			System.out.println(sArray[i]);
		}
	}
}

控制台打印如下:

 

 

2.使用匿名内部类来简化书写:


public static void main(String[] args) {
	Student s1 = new Student(1, "小红", 12);
	Student s2 = new Student(3, "小张", 10);
	Student s3 = new Student(2, "小王", 8);
	Student[] sArray =  { s1, s2, s3 };
	Arrays.sort(sArray,new Comparator(){
        @Override
        public int comepare(Student s1,Students s2){
        return s1.id-s2.id;

        }
		
    });

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值