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

如题,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()は非再帰的に実装されているため、この問題は存在しません。

いいねを押す +0
大家讲道理

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート