JAVA Arrays.sort()和Collectons.sort() 原理分析
阿新 • • 發佈:2019-02-14
今天終於答辯結束,I’M FREEDOM!!! ^—^
首先Collections內部也是使用Arrays的sort實現的,因此著重分析Arrays類內的sort是如何實現的
主要分兩種:
- 對於基本型別,使用調優的快排,雙指標快排
- 對於引用型別,採用改進的歸併排序 TimSort()
注意以下都是JDK8內的實現
對於快排的優化是:
public static void sort(int[] a) {
DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0);
}
// Use Quicksort on small arrays
if (right - left < QUICKSORT_THRESHOLD) {
sort(a, left, right, true);
return;
}
首先當陣列元素個數小於286的時候,優先使用快排。
public static void sort(Object[] a) {
if (LegacyMergeSort.userRequested)
legacyMergeSort(a);
else
ComparableTimSort.sort(a, 0 , a.length, null, 0, 0);
}
//TODO 未完成