如题,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() 애플리케이션 시나리오:
개체 유형을 정렬합니다. 퀵 정렬은 불안정하며 기본 유형에는 영향을 미치지 않지만 객체 유형에는 영향을 미칩니다. 병합 정렬은 안정적입니다.
큰 배열을 정렬합니다. 퀵소트의 sort()는 재귀적으로 구현되는데, 배열 크기가 너무 크면 스택 오버플로가 발생하는 반면, 병합 정렬의 sort()는 비재귀적으로 구현되어 이러한 문제가 발생하지 않습니다.
클래스 정렬에는 각각 다른 규칙이 있습니다. 기본 유형은 큰 것에서 작은 것, 작은 것에서 큰 것입니다. 하지만 클래스 정렬은 전적으로 사용자 정의를 기반으로 합니다. 이는 디자인 패턴입니다