如题,JDK7中的java.util.Arrays工具类中的排序方法sort()对基本类型和对象采用不同的排序算法。
对基本类型,采用DualPivotQuicksort排序算法,如下:
public static void sort(int[] a) {
DualPivotQuicksort.sort(a);
}
对Object类型,采用ComparableTimSort排序算法,如下:
public static void sort(Object[] a) {
if (LegacyMergeSort.userRequested)
legacyMergeSort(a);
else
ComparableTimSort.sort(a);
}
请问这样选择的原因是什么?
高人指點,原因如下。歸併排序sort()應用場景:
對Object類型進行排序。快速排序不穩定,對基本型別無影響,對Object類型有影響。歸併排序穩定。
對大數組排序。快速排序的sort()採用遞歸實現,數組規模太大時會發生堆疊溢出,而歸併排序sort()採用非遞歸實現,不存在此問題。
類別排序,各自的規則不一樣。基本類型要么從大到小,要么從小到大。但是類別排序則完全要依照使用者定義,這是設計模式