首頁  >  問答  >  主體

java - JDK7中Arrays工具类sort()对基本类型和对象采用不同排序算法的原因是什么?

如题,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);
}

请问这样选择的原因是什么?

伊谢尔伦伊谢尔伦2721 天前797

全部回覆(2)我來回復

  • PHPz

    PHPz2017-04-17 17:12:36

    高人指點,原因如下。歸併排序sort()應用場景:

    1. 對Object類型進行排序。快速排序不穩定,對基本型別無影響,對Object類型有影響。歸併排序穩定。

    2. 對大數組排序。快速排序的sort()採用遞歸實現,數組規模太大時會發生堆疊溢出,而歸併排序sort()採用非遞歸實現,不存在此問題。

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 17:12:36

    類別排序,各自的規則不一樣。基本類型要么從大到小,要么從小到大。但是類別排序則完全要依照使用者定義,這是設計模式

    回覆
    0
  • 取消回覆