java - JDK7中Arrays工具类sort()对基本类型和对象采用不同排序算法的原因是什么?
伊谢尔伦
伊谢尔伦 2017-04-17 17:10:36
0
2
858

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

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

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

모든 응답(2)
PHPzhong

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

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

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

大家讲道理

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

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿