Arrays.sort()使用Comparator或 Comparable接口对对象排序

简述:如果要排序的数组中元素为基本数据类型,那么Arrays.sort()就会自己判断元素大小并排序,如果数组中的数据类型为引用类型那么就要自己定义排序方法。

方法一、使用Comparable接口:
让待排序对象所在的类实现Comparable接口,并重写Comparable接口中的compareTo() 。方法缺点是只能按照一种规则排序。

方法二、使用Comparator接口 (推荐使用)
如果一个类要实现java.util.Comparator接口:它一定要实现
int compare(T o1, T o2) 函数,而另一个可以不实现(boolean equals(Object obj)) 。
使用编写排序方式类实现Comparator接口,并重写新Comparator接口中的compare()方法。优点:想用什么方式排就用什么方式排。

原理:观察Arrays.sort()源码如下。

public static <T> void sort(T[] a, Comparator<? super T> c) {
     
        if (c == null) {
     
            sort(a);
        } else {
     
            if (LegacyMergeSort.userRequested)
                legacyMergeSort(a, c);
            else
                TimSort.sort(a, 0, a.length, c, null, 0, 0);
        }
    }

所以,在传入要排序数组时,还可以传入一个Compartor接口(比较器),然后这个接口中要重写一个compare()方法,这个重写的compare()方法就是我们自己规定的比较规则。

Compare接口中的compare()方法源码如下:

int compare(T o1, T o2);

重写compare()方法的意义在于,指定谁大谁小,如果方法返回值为负说明o1小,如果返回值为正说明o2小,如果为0,说明o1 = o2。然后交给Arrays.sort()排序就行了。

你可能感兴趣的:(日常,java)