JDk中能够实现排序的两个工具类有ArraysCollections,Arrays.sort()主要用于对数组进行排序,包括基本类型的数组和对象数组;Collections.sort()可以对List等集合类进行排序,其内部也是调用的Arrays.sort()那一套。

Arrays.sort()针对基本类型数组和对象数组采用不同的排序方法:

  1. 基本类型数组采用DualPivotQuicksort.sort(),快速排序的一种优化。
  2. 对象数组采用ComparableTimSort.sort()

先来通过代码分析一下ComparableTimSort.sort()实现原理:

  1. 当待排序元素小于32个时,采用二分插入排序(自行查阅资料),是插入排序的一种改进,可以减少插入排序比较的次数。当找到插入位置时,直接利用System.copy()函数即可。
  2. 当待排序元素大于等于32个时,进行归并排序(和传统的归并不一样),首先将排序元素分区,每个分区的大小区间为[16,32),然后依次对每个分区进行排序(具体实现依然是二分插入排序),排完序的分区压入栈(准确的说不是栈,而是一个数组,用来记录排序好的分区),当栈内的分区数满足条件时,进行分区合并,合并为一个更大的分区,当栈中只剩一个分区时,排序完成。

    参考链接:https://blog.csdn.net/qq_25673113/article/details/60468364