Java中Arrays.sort()自定义排序的实现
- 介绍一下Arrays.sort()函数的功能:
Arrays.sort()是java Arrarys中的一个静态方法,主要是用来进行数组排序,简单快捷好用。
-
首先来介绍一下常用默认升序排序:public static void sort(T[] a)
import java.util.*; public class Main{ public static void main(String[] args){ int[] arr = new int[]{2,5,8,9,6,1}; System.out.println("排序前:"+Arrays.toString(arr)); Arrays.sort(arr); System.out.println("排序后:"+Arrays.toString(arr)); } }
输出:
排序前:[2, 5, 8, 9, 6, 1]
排序前:[1, 2, 5, 6, 8, 9]
从以上可以看出,当sort()传入参数只是一个数组时,默认将数组按升序排列。
- 数组的部分排序:public static void sort(T[] a, int fromIndex, int toIndex)
import java.util.*;
public class Main{
public static void main(String[] args){
int[] arr = new int[]{5,4,3,2,1};
System.out.println("排序前:"+Arrays.toString(arr));
Arrays.sort(arr,1,4);
System.out.println("排序后:"+Arrays.toString(arr));
}
}
排序前:[5, 4, 3, 2, 1]
排序后:[5, 2, 3, 4, 1]
以上可以看出,对数组的部分排序,只需要传入起始位置和终止位置(不包括),如果排序需要包括最后一个元素,则传入a.length(数组长度)即可。
-
降序
在介绍降序排列时,首先看一下sort()的另一个构造函数:
通过这个构造函数可以看出,除了传入需要排序的数组外,还需要传入一个实现Comparator接口的类。
import java.util.*;
public class Main{
public static void main(String[] args){
Integer[] arr = {1,5,8,4,2,6,4};
System.out.println("排序前:"+Arrays.toString(arr));
Arrays.sort(arr, new Comparator<Integer>()
{
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
System.out.println("排序后:"+Arrays.toString(arr));
}
}
排序前:[1, 5, 8, 4, 2, 6, 4]
排序后:[8, 6, 5, 4, 4, 2, 1]
实现Comparator接口有两种方式,第一种是上面所示的匿名内部类实现。
import java.util.*;
public class Main{
public static void main(String[] args){
Integer[] arr = {1,5,8,4,2,6,4};
System.out.println("排序前:"+Arrays.toString(arr));
Comparator myComparator = new MyComparator();
Arrays.sort(arr, myComparator );
System.out.println("排序后:"+Arrays.toString(arr));
}
}
class MyComparator implements Comparator<Integer>{
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
}
第二种是新建一个类然后实现Comparator接口,再new一个类传入sort函数中。
值得注意的是:Comparator中的类型是Integer,排序的数组也只能是Integer类型,不能够是int类型