Home  >  Q&A  >  body text

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);
}

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

伊谢尔伦伊谢尔伦2626 days ago720

reply all(2)I'll reply

  • PHPz

    PHPz2017-04-17 17:12:36

    高人指点,原因如下。归并排序sort()应用场景:

    1. 对Object类型进行排序。快速排序不稳定,对基本类型无影响,对Object类型有影响。归并排序稳定。

    2. 对大数组排序。快速排序的sort()采用递归实现,数组规模太大时会发生堆栈溢出,而归并排序sort()采用非递归实现,不存在此问题。

    reply
    0
  • 大家讲道理

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

    类排序,各自的规则不一样。基本类型要么从大到小,要么从小到大。但是类排序则完全要根据用户定义,这是设计模式

    reply
    0
  • Cancelreply