首先Arrays是一个工具类,所以Arrys.sort()这个方法是一个静态方法,先看看sort的源代码().
public static void sort(int[] var0) {
DualPivotQuicksort.sort(var0, 0, var0.length - 1, (int[])null, 0, 0);
}
public static void sort(int[] var0, int var1, int var2) {
rangeCheck(var0.length, var1, var2);
DualPivotQuicksort.sort(var0, var1, var2 - 1, (int[])null, 0, 0);
}
这里只是拿int数组出来举例,从原来的代码可以看出不只是int类型的,在sort里面有8个基本数据类型的数组都可以进行排序。当然,对象的也有,这里就先看的是sort方法。sort调用的是也是一个算法类, 在第一个sort方法中,只需要填写数据就行,而sort方法里面的DualPivotQuicksort这个方法里面才是具体的实现了算法的细节,当然这里也没必要去先深入了解,先把基本的会用才是。
而在第二个方法中的sort方法是在部分范围内去排序,就是在第二个参数上输入在左边的开始位置,第三个就是输入右边的截止范围,通过源代码的这段可以知道,范围是闭合的,也就是输入的var1和var2是包含在里面的。
int var4 = var2 - var1 + 1;
而在排序之前,由于输入的范围可能会超过临界值或者是在负数的情况,所以在排序之前会进行范围检查,如下:
rangeCheck(var0.length, var1, var2);
来看具体的rangeCheck方法:
private static void rangeCheck(int var0, int var1, int var2) {
if (var1 > var2) {
throw new IllegalArgumentException("fromIndex(" + var1 + ") > toIndex(" + var2 + ")");
} else if (var1 < 0) {
throw new ArrayIndexOutOfBoundsException(var1);
} else if (var2 > var0) {
throw new ArrayIndexOutOfBoundsException(var2);
}
}
从源代码中也可以看见,也是用静态类来实现方法,第一个if说的就是var1必须要小于或者等于var2,不然会抛出不合法的输入错误,并提示var1和var2的关系。在第二个条件判断里面,var1如果小于零,就会抛出超出临界值的异常类,第三个条件是判断var2右边的范围不能超过其当前数组的范围长度,不然也会抛出数组范围抛出异常。
只有经过了范围的检查,才能够进行排序,好了,这就是我对这次sort排序的一次小小的见解,如有其他的见解,可以一起讨论,一起学习一下。