찾다

 >  Q&A  >  본문

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

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

伊谢尔伦伊谢尔伦2804일 전861

모든 응답(2)나는 대답할 것이다

  • PHPz

    PHPz2017-04-17 17:12:36

    전문가의 조언, 그 이유는 다음과 같습니다. 병합 정렬 sort() 애플리케이션 시나리오:

    1. 개체 유형을 정렬합니다. 퀵 정렬은 불안정하며 기본 유형에는 영향을 미치지 않지만 객체 유형에는 영향을 미칩니다. 병합 정렬은 안정적입니다.

    2. 큰 배열을 정렬합니다. 퀵소트의 sort()는 재귀적으로 구현되는데, 배열 크기가 너무 크면 스택 오버플로가 발생하는 반면, 병합 정렬의 sort()는 비재귀적으로 구현되어 이러한 문제가 발생하지 않습니다.

    회신하다
    0
  • 大家讲道理

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

    클래스 정렬에는 각각 다른 규칙이 있습니다. 기본 유형은 큰 것에서 작은 것, 작은 것에서 큰 것입니다. 하지만 클래스 정렬은 전적으로 사용자 정의를 기반으로 합니다. 이는 디자인 패턴입니다

    회신하다
    0
  • 취소회신하다