假设有四个学生对象:
name:"小明",height:168.8,age:22 name:"小红",height:178.5,age:20 name:"小智",height:160.1,age:21 name:"小白",height:230.6,age:22
现在需要按身高对他们进行排序
对象进行排序,默认是没法排的,但是有两个方法可以按对象某个属性进行排序
方法一:让该对象的类实现Comparable(比较规则)接口,然后重写compareTo方法,自己来制定比较规则
代码演示:
类代码:
public class student implements Comparable<student>{ //实现Comparable接口
private String name;
private Double height;
private int age;
//指定比较规则
//this o
@Override
public int compareTo(student o) { //重写compareTo方法
//三个约定
//约定1:认为左边对象 大于 右边对象 返回正整数
//约定2:认为左边对象 小于 右边对象 返回负整数
//约定3:认为左边对象 等于 右边对象 返回0
if(this.height > o.height){
return 1;
}else if(this.height < o.height){
return -1;
}
return 0;
//需要降序调换一下this和o的位置即可
}
@Override
public String toString() {
return name;
}
public student() {
}
public student(String name, Double height, int age) {
this.name = name;
this.height = height;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getHeight() {
return height;
}
public void setHeight(Double height) {
this.height = height;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
test:
public class 对象排序 {
public static void main(String[] args) {
student[] s = new student[4];
s[0] = new student("小明",168.8,22);
s[1] = new student("小红",178.5,20);
s[2] = new student("小智",160.1,21);
s[3] = new student("小白",230.6,22);
Arrays.sort(s); //对对象数组进行排序
System.out.println(Arrays.toString(s)); //打印结果
}
}
结果:
方法二:使用下面这个sort方法,创建Comparator比较器接口的匿名内部类对象,然后自己制定比较规则
代码演示:
test:
import java.util.Arrays;
import java.util.Comparator;
public class 对象排序 {
public static void main(String[] args) {
student[] s = new student[4];
s[0] = new student("小明",168.8,22);
s[1] = new student("小红",178.5,20);
s[2] = new student("小智",160.1,21);
s[3] = new student("小白",230.6,22);
//方法一
// Arrays.sort(s);
// System.out.println(Arrays.toString(s));
//方法二
Arrays.sort(s, new Comparator<student>() {
@Override
public int compare(student o1, student o2) {
//左边对象 o1 右边对象 o2
//约定
//约定1:认为左边对象 大于 右边对象 返回正整数
//约定2:认为左边对象 小于 右边对象 返回负整数
//约定3:认为左边对象 等于 右边对象 返回0
return Double.compare(o1.getHeight(),o2.getHeight());
//需要降序调换this和o的位置
}
});
System.out.println(Arrays.toString(s));
}
}
自定义排序规则时,需遵循的官方约定如下: