return o1 - o2; // 默认第一个比第二个大,就 返回正数,正数,这个Comparator比较器接口就会升序排序,
return o2 - o1; // 第二个比第一个大,返回负数, 这个Comparator比较器接口就会降序排序,原型:-(o1-o2)
package com.itheima.d7_arrays;import java.util.Arrays;import java.util.Comparator;public class ArrayDemo2 {public static void main(String[] args) {// 目标:自定义数组的排序规则:Comparator比较器对象// 1. Arrays的sort方法对于有值特性的数组是默认升序排序int[] ages = {34, 12, 42, 23};Arrays.sort(ages);System.out.println(Arrays.toString(ages));// 2. 需求:降价排序!(自定义比较器对象,只能支持引用类型的排序!)int[] 数组是引用类型,元素是基本数据类型,所以用IntegerInteger[] ages1 = {34, 12, 42, 23};/*** 参数一:被排序的数组,必须是引用类型的元素* 参数二:匿名内部类对象,代表了一个比较器对象*/Arrays.sort(ages1, new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {// 在这里指定比较规则// if (o1 > o2){// return 1; // 这里的 1 没有实际意义,相当于信号一样 这个信号只要是正数就行// }else if (o1 <o2){// return -1; // -1没有实际意义就是个信号 // 这个信号只要是负数就行// }// return 0; // 认为两个相等返回0// 也可以这样一步到位:// return o1 - o2; // 默认 如果第一个比第二个大,就 返回正数,正数,这个Comparator比较器接口就会升序排序,return o2 - o1; // 第二个比第一个大,返回负数, 这个Comparator比较器接口就会降序排序,原型:-(o1-o2)}});System.out.println(Arrays.toString(ages1));System.out.println("=========================");Student[] students = new Student[3]; // 创建一个存放引用类型的数组对象(所以用Student[]),存储的是Student类的对象,存储的数量为 3students[0] = new Student("吴磊",23,180);students[1] = new Student("吴1",24,181);students[2] = new Student("吴2",25,182);System.out.println(Arrays.toString(students)); // 打印的是这数组存放,三个对象的地址,没有重写toString方法// 排序// Arrays.sort(students); // 运行会直接报错,他不知道怎么排,没有条件Arrays.sort(students, new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {// 在这里重写排序规则// return o1.getAge() - o2.getAge(); // 根据年龄进行升序排序 默认第一个减第二个返回正数// return o2.getAge() - o1.getAge(); // 根据年龄进行降序排序// 也可以按照身高进行降序排序 因为身高会有小数,而compare方法的返回值是int,所以身高不能直接相减return Double.compare(o2.getHeight(),o1.getHeight()); // 降序将o1和o2倒过来}});System.out.println(Arrays.toString(students)); //[Student{name='吴2', age=25, height=182.0}, Student{name='吴1', age=24, height=181.0}, Student{name='吴磊', age=23, height=180.0}]}}
