基本数据类型比较大小时,我们可以用比较运算符。当两个对象比较大小时,我们就可以用比较器了。实现的方式有两种,如下:
方式一:自然排序,实现接口Comparable
创建一个自定义类Students,实现接口Comparable,并重写compareTo方法,在方法体中规定排序规则。
class Students implements Comparable{
private String name;
private int age;
public Students() {
}
public Students(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Students{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(Object o) {
if(o instanceof Students){
Students obj = (Students) o;
/**
* 当前对象属性大于参数的对象属性,返回值为正数时是从小到大排序
* 当前对象属性小于参数的对象属性,返回值为正数时是从大到小排序
*/
if(this.getAge() > obj.getAge()){
return 1;
}else if (this.getAge() < obj.getAge()){
return -1;
}else{
return this.getName().compareTo(obj.getName());
}
}
throw new RuntimeException("参数类型错误");
}
}
public class CompareTest{
public static void main(String[] args) {
Students[] students = new Students[]{
new Students("李雷", 26),
new Students("黎明", 24),
new Students("王伟", 29),
new Students("艾米", 26),
};
Arrays.sort(students);
System.out.println(Arrays.toString(students));
// [Students{name='黎明', age=24}, Students{name='李雷', age=26}, Students{name='艾米', age=26}, Students{name='王伟', age=29}]
}
}
方式二:定制排序,不需要实现接口Comparable
class Students{
private String name;
private int age;
public Students() {
}
public Students(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Students{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class CompareTest{
public static void main(String[] args) {
Students[] students = new Students[]{
new Students("李雷", 26),
new Students("黎明", 24),
new Students("王伟", 29),
new Students("艾米", 26),
};
Arrays.sort(students, new Comparator<Students>() {
@Override
public int compare(Students o1, Students o2) {
/**
* 当前对象属性大于参数的对象属性,返回值为正数时是从小到大排序
* 当前对象属性小于参数的对象属性,返回值为正数时是从大到小排序
*/
if(o1.getAge() > o2.getAge()){
return 1;
}else if (o1.getAge() < o2.getAge()){
return -1;
}else{
return o1.getName().compareTo(o2.getName());
}
}
});
System.out.println(Arrays.toString(students)); // [Students{name='黎明', age=24}, Students{name='李雷', age=26}, Students{name='艾米', age=26}, Students{name='王伟', age=29}]
}
}