比较器

比较器主要用于对对象的排序,比如一个对象里面有好几个属性,应该按什么属性规律来排序呢?这就要实现Comparator< E >接口

public class compare {

	public static class Student{
		String name;
		int id;
		int age;
		public Student(String name,int id,int age) {
			this.name=name;
			this.id=id;
			this.age=age;
		}
	}
	public static class IdAscendComparatr implements Comparator<Student>{

		@Override
		public int compare(Student o1, Student o2) { 
			return o1.id-o2.id;//升序   
			//<0  则把前者排进去
			//>0  则把后者排进去
			//==0  两者相等
		}
		
	}
	public static class IdDescendComparatr implements Comparator<Student>{

		@Override
		public int compare(Student o1, Student o2) {
			return o2.id-o1.id;//降序
		}
		
	}
	public static void PrintStudents(Student[] students) {
		for(int i=0;i<students.length;i++) {
			System.out.println("name:"+students[i].name+"    id:"+students[i].id+"    age:"+students[i].age);
		}
		System.out.println("===============================================");
	}
	public static void main(String[] args) {
		Student t1=new Student("A",2,20);
		Student t2=new Student("B",1,18);
		Student t3=new Student("C",3,19);
		Student[] students= new Student[]{t1,t2,t3};
		//Arrays.sort(students);//不知道按什么方式比较,所以出错
		//PrintStudents(students);
		
		Arrays.sort(students,new IdAscendComparatr());
		PrintStudents(students);
		
		Arrays.sort(students, new IdDescendComparatr());
		PrintStudents(students);

		//优先队列实际就是堆,比较器也可以用于堆
		PriorityQueue<Student> heap=new PriorityQueue<>(new IdDescendComparatr());
		heap.add(t1);
		heap.add(t2);
		heap.add(t3);
		while(!heap.isEmpty()) {
			Student student=heap.poll();//每次弹出堆顶
			System.out.println("name:"+student.name+"    id:"+student.id+"    age:"+student.age);
		}
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值