如题,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
クラス分けにはそれぞれ異なるルールがあります。基本的なタイプは、大から小、または小から大のいずれかです。ただし、クラスの並べ替えは完全にユーザー定義に基づいています。これは設計パターンです
。