我们先给一个数组排序,我们肯定用的是Arrays.sort()方法:
public class test2 {
public static void main(String[] args) {
int[] arr={3,5,4,6,9,8,1};
System.out.println(Arrays.toString(arr));
System.out.println("---------");
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
}
}
这样我们就实现了对这个数组的排序。
但是我们现在又有另外一个需求:
class Student{
public String name;
public int age;
public int score;
public Student(String name, int age, int score) {
this.name = name;
this.age = age;
this.score = score;
}
}
Student[] students=new Student[4];
students[0]=new Student("zhangsan",10,19);
students[1]=new Student("lisi",8,78);
students[2]=new Student("wangwu",15,57);
students[3]=new Student("zhaoliu",11,57);
这里定义了一个Student数组,数组大小为4,也就是说数组中有4个学生,然后分别实例化了4个学生,把他们的名字年龄和成绩都输入了进去,现在我们想以年龄或成绩进行排序,那应该怎么实现呢,还是用Arrays.sort()方法吗?我们可以试一下:
当我们把这个数组进行排序时,报错了,报了一个类型转换异常。
我们进入这个第二行报的错,显示源码中第320行报错:源码中这几段代码的意思是取到数组中的某个值,把这个值转化为了一个Comparable类型(这个Comparable是一个接口),然后调用一个compareTo()方法。
可是我们现在学生类型和这个接口类型没有什么关系,所以会报错。那怎么让他可以转换呢,我们可以让这个类实现这个接口,这个接口有一个compareTo()方法,所以我们要重写这个compareTo()方法。
那么我们总结一下:实现了comparable接口的这些类,我们就可以使用Arrays.sort()来进行一个排序。如果没有实现comparable接口直接用Arrays.sort()来进行排序的话,那他是没办法帮你排序的。但是我们做了规定,如果你想排序的话,那么我们就实现comparable接口。然后再重写里面的compareTo()方法,然后在compareTo()方法里面就可以根据你自定义的一个逻辑来进行排序。
然后我们来看一下完整的代码,要求对4个学生的年龄大小进行排序:
package csdn;
import java.util.Arrays;
class Student implements Comparable<Student> {
public String name;
public int age;
public int score;
public Student(String name, int age, int score) {
this.name = name;
this.age = age;
this.score = score;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", score=" + score +
'}';
}
@Override
public int compareTo(Student o) { //重写compareTo方法
if (this.age>o.age){ //根据年龄大小进行排序
return 9;
}else if (this.age<o.age){
return -1;
}else {
return 0;
}
}
}
public class test {
public static void main(String[] args) {
Student[] students=new Student[4];
students[0]=new Student("zhangsan",10,19);
students[1]=new Student("lisi",8,78);
students[2]=new Student("wangwu",15,57);
students[3]=new Student("zhaoliu",11,57);
Arrays.sort(students);
System.out.println(Arrays.toString(students));
}
}
这里输出的结果就是按照学生年龄的大小来排序的。