通过实现Comparable接口得到对象之间的比较排序

		和大家分享一下今天学到的***Comparable***`接口,感觉非常有趣,因为通过实现Comparable接口,我们可以实现对象与对象之间的比较排序。
		首先,我们来分析一下对象与对象之间为什么要一定要通过实现Comparable接口来实现排序,我们先来做一个实验:
		(1)创建一个学生类,包含成员变量name和age,有一个打印name和age的print方法
class Student{
	private String name;
	private int age;
	public Student(String name,int age){
		this.age = age ;
		this.name = name;
	}
	public void print(){
		System.out.println("name "+name+", age "+age+"\t");
	}

(2)在main方法中创建Student的对象,来实现对象之间的比较:

package t1;
import java.util.Arrays;
public class School{
	public static void main(String[] args){
		//创建Studnet类型的数组
		Student[] s = new Student[]{
			//存入Student的对象
			new Student("g",5),
			new Student("y",9),
			new Student("q",0),
			new Student("z",2),
			new Student("r",1),
			new Student("u",3)
		};
		//升序排序
		Arrays.sort(s);
		//遍历输出
		for(Student st:s){
			st.print();
		}
	}
}	

(3)结果如下:
编译顺利通过:在这里插入图片描述
但是在运行的时候出了类型转换的异常:
在这里插入图片描述
(4)所以以上这种方法是不可取的,我们换另外一种方法,也就是Student类实现Comparable接口的方法:

//让Student类实现Comparable接口
class Student implements Comparable<Student>{
	private String name;
	private int age;
	public Student(String name,int age){
		this.age = age ;
		this.name = name;
	}
	public void print(){
		System.out.println("name "+name+", age "+age+"\t");
	}
	//实现Comparable中唯一的compareTo方法
	public int compareTo(Student s){
		//通过创建对象中的年龄来排序
		if(this.age < s.age) return -1;
		else if(this.age > s.age) return 1;
		else return 0;
	}
}

(5)创建对象验证结果:

package t1;
import java.util.Arrays;
public class School{
	public static void main(String[] args){
		//创建Studnet类型的数组
		Student[] s = new Student[]{
			//存入Student的对象
			new Student("g",5),
			new Student("y",9),
			new Student("q",0),
			new Student("z",2),
			new Student("r",1),
			new Student("u",3)
		};
		//此时则是根据年龄升序排序
		Arrays.sort(s);
		//遍历输出
		for(Student st:s){
			st.print();
		}
	}
}	

编译,运行结果如下:
在这里插入图片描述
得到了我们想要的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值