Comparator接口排序讲解
接口介绍
Comparator是Java中的一个接口,它用于定义对象的比较规则。Comparator接口中只有一个方法compare()
,用于比较两个对象的大小关系。
其函数签名如下:
int compare(T o1, T o2)
关于这个函数的介绍,根据官方文档,其表述如下:
该函数的参数是两个对象:
- o1代表要比较的第一个对象
- o2代表要比较的第二个对象
该参数的返回值是一个负整数、零或者正整数,其含义如下:
负整数:代表第一个对象小于第二个对象
零:代表第一个对象等于第二个对象
正整数:代表第一个对象大于第二个对象
接口使用
在我们进行对象的排序时,往往需要自定义排序,比如对于一个Persion
类,我们想要根据Persion
类种的age
来进行升序排序。
这就用到了自定义的Comparator接口。
Persion
类定义
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
实现Comparator接口
import java.util.Comparator;
public class AgeComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
// 升序
return p1.getAge() - p2.getAge();
}
}
使用
Arrays.sort()
进行排序
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Person[] persons = new Person[3];
persons[0] = new Person("Alice", 25);
persons[1] = new Person("Bob", 20);
persons[2] = new Person("Charlie", 30);
// 将接口实现应用在sort方法上
Arrays.sort(persons, new AgeComparator());
for (Person person : persons) {
System.out.println(person.getName() + " - " + person.getAge());
}
}
}
最后输出结果
Bob - 20
Alice - 25
Charlie - 30
可以看到,最后的结果按照年龄的升序进行排序,这就是Comparator接口的作用。
注意:Compare
方法的两个参数是对象类型,所以不能是基本数据类型。