ホームページ  >  に質問  >  本文

java - JDK7中Arrays工具类sort()对基本类型和对象采用不同排序算法的原因是什么?

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

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

伊谢尔伦伊谢尔伦2720日前794

全員に返信(2)返信します

  • PHPz

    PHPz2017-04-17 17:12:36

    専門家のアドバイス、その理由は次のとおりです。マージ・ソート sort() アプリケーション・シナリオ:

    1. オブジェクトの種類を並べ替えます。クイック ソートは不安定で、基本タイプには影響しませんが、オブジェクト タイプには影響します。マージソートは安定しています。

    2. 大きな配列を並べ替えます。クイックソートのsort()は再帰的に実装されており、配列サイズが大きすぎるとスタックオーバーフローが発生しますが、マージソートのsort()は非再帰的に実装されているため、この問題は存在しません。

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-17 17:12:36

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

    返事
    0
  • キャンセル返事