和大家分享一下今天学到的***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();
}
}
}
编译,运行结果如下:
得到了我们想要的结果。