参考文章: JAVA中Arrays.sort()使用方法,升序降序,以及自定义比较器(Comparable和Comparator接口)的使用,小白向_Aomiz_lm的博客-优快云博客
一、默认排序 -升序排序
1.1 基本数据类型数组的排序
1.1.1 元素类型为数字
Arrays.sort(int[] num); // 升序排序
Arrays.sort(int[] num,int startIndex,int endIndex); // 指定范围[startIndex,endIndex)的元素升序排序
1.1.2 元素类型为字符/字符串
String[] str = new String[]{"Z","a","D"};
Arrays.sort(str); // 升序排序(先小写,后大写)
Arrays.sort(str,String.CASE_INSENSITIVE_ORDER); // 升序排序(忽略大小写)
二、自定义排序
1. Collections.reverseOrder() 实现降序排序
对于基本类型的数组(int[],double[],char[]),Arrays类只提供了默认的升序排序
使用Collections.reverseOrder()前,先需要将基本类型转包装类型
如:
int num = new int[]{1,2,3,89,4};
Integer[] newNum = new Integer[scores.length];
for(int i = 0;i < num.length;i++){
newNum[i] = new Integer(num[i]);
}
Arrays.sort(newNum,Collections.reverseOrder());
2. 自定义比较器,重写compare方法
int[] num;
Arrays.sort(num,new Comparator<>(){
// override
public int compare(int o1,int o2){
return o1 - o2; // 该写法对于特殊的用例会超出int型的范围
// 可用如下写法代替 注意: 返回值正(交换),返回值负(不交换),返回值0(不交换)
if(o1 > o2) return 1;
else if (o1 < o2) return -1;
else return 0;
});
3. Arrays.sort 对二维数组排序
int[][] num;
Arrays.sort(num,new Comparator<>(){
// override
public int compare(int[] o1,int[] o2){
// 按第一个元素排序
return o1[0] - o2[0]; // 升序排序
// 补充: 若按第二个元素排序 return o1[1] - o2[1];
});
4. lambda 表达式简化自定义比较器写法
Arrays.sort(num,(int[] o1,int[] o2) -> {return o1 - o2});
三、Arrays.sort的底层原理 - 基于双轴快排
(待补充)