JDK中的排序:Arrays.sort的源码实现
文章目录
Java中的排序并没有那么简单
JDK中的排序是如何实现的?用了什么算法?或许有人说用了快排,但事实上JDK中排序的实现并没有那么简单,我们进入Arrays.sort的源码来一探究竟
整体看看Arrays.sort的所有重载方法
Arrays.sort作为重载方法,具有很多不同的参数实现:
从排序是对数组整体排序还是部分排序来看,可分为两类,部分排序即需要传入排序部分的起终点,根据我们的经验,整体排序可能是调用的部分排序的sort方法,不过传入的起点为0,终点为length - 1,看看源码:
我们发现整体排序并不是调用的部分排序的方法,Arrays.sort(int[] a)
和Arrays.sort(int[] a, int fromIndex, int toIndex)
只是个入口,它们都会去调用DualPivotQuicksort.sort
方法,都会传入排序部分的起终点,不过整体排序传入的起终点为0和length - 1。
从数组元素的类型来看,可以将Arrays.sort分为对基本数据类型的排序和对泛型及Object数组的排序。进入源码我们可以发现:对于基本数据类型数组的排序,Arrays.sort都将调用DualPivotQuicksort.sort
方法,而泛型及Object数组的排序实现则与之不同。
对基本数据类型数组的排序
对于基本数据类型数组的排序,Arrays.sort都将调用DualPivotQuicksort.sort
方法,我们来看看这个方法的部分源码&