比较器
为什么要用比较器
例如:我们需要将一个数组从小到大排序
代码如下
int[] arr = {2,5,8,9,1,3,6,7,4};
Arrays.sort(arr);
for(int i : arr){
System.out.print(i + " ");
}
//结果为1 2 3 4 5 6 7 8 9
上述代码我们使用了Arrays这个工具类,那么问题来了很多时候我们希望数据根据自己的规则进行排序,这个时候就需要使用比较器了
还是这个问题不过是将数组从大到小进行排序
代码如下
public static void main( String[] args ){
Integer[] arr = {2,5,8,9,1,3,6,7,4};
Arrays.sort(arr,new MySort ());
for (int i : arr) {
System.out.print (i + " ");
}
}
}
//实现了比较器接口
class MySort implements Comparator<Integer>{
@Override
public int compare( Integer o1, Integer o2 ) {
//o1 - o2 从小到大排
//o2 - o1 从大到小排
//o1 = o2 谁在前面无所谓
return o2 - o1;
}
}
//结果为9 8 7 6 5 4 3 2 1
这样我们就完成了比较器的使用,是不是感觉很简单,让我们进阶一丢丢,新建一个Person类 ,按照他们的年龄从大到小进行排序,是不是一下子就有头绪啦,快快快动起来,完成之后才能看答案哦
代码如下
public static void main( String[] args ){
Person[] arr = new Person[3];
arr[0] = new Person ("P1" , 18 ,1);
arr[1] = new Person ("P2" , 78 ,2);
arr[2] = new Person ("P3" , 10 ,3);
Arrays.sort (arr , new MySort ());
for (Person person : arr) {
System.out.println (person);
}
}
class MySort implements Comparator<Person>{
@Override
public int compare( Person o1, Person o2 ) {
return o2.age - o1.age;
}
}
class Person{
String name;
int age;
int id;
public Person( String name, int age, int id ) {
this.name = name;
this.age = age;
this.id = id;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", id=" + id +
'}';
}
}
/*
结果为:
Person{name='P2', age=78, id=2}
Person{name='P1', age=18, id=1}
Person{name='P3', age=10, id=3}
*/
是不是和自己写的一样呀,现实情况中,可能会有十分复杂的比较,利用上述规则和使用方法,就可以完成功能的实现啦