如题,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);
}
请问这样选择的原因是什么?
PHPz2017-04-17 17:12:36
전문가의 조언, 그 이유는 다음과 같습니다. 병합 정렬 sort() 애플리케이션 시나리오:
개체 유형을 정렬합니다. 퀵 정렬은 불안정하며 기본 유형에는 영향을 미치지 않지만 객체 유형에는 영향을 미칩니다. 병합 정렬은 안정적입니다.
큰 배열을 정렬합니다. 퀵소트의 sort()는 재귀적으로 구현되는데, 배열 크기가 너무 크면 스택 오버플로가 발생하는 반면, 병합 정렬의 sort()는 비재귀적으로 구현되어 이러한 문제가 발생하지 않습니다.
大家讲道理2017-04-17 17:12:36
클래스 정렬에는 각각 다른 규칙이 있습니다. 기본 유형은 큰 것에서 작은 것, 작은 것에서 큰 것입니다. 하지만 클래스 정렬은 전적으로 사용자 정의를 기반으로 합니다. 이는 디자인 패턴입니다