Java の Arrays クラスを使用して配列をソートする方法の詳細な説明

PHPz
リリース: 2023-07-25 10:13:34
オリジナル
2402 人が閲覧しました

Java が Arrays クラスを使用して配列を並べ替える方法の詳細な説明

Java プログラミングでは、配列を並べ替える必要があることがよくあります。並べ替えプロセスを簡素化するために、Java は Arrays クラスを提供します。このクラスには、一般的に使用されるいくつかの並べ替えメソッドが含まれています。この記事では、Arrays クラスの並べ替えメソッドを詳細に紹介し、コード例を通じてその使用法を示します。

  1. Arrays クラスの Sort メソッド

Arrays クラスには、sort とParallelSort という 2 つのオーバーロードされた並べ替えメソッドが用意されています。前者は配列をシリアルにソートするために使用され、後者は配列を並列にソートするために使用されます。

1.1 sort メソッド

sort メソッドは、配列を順番にソートするために使用されます。複数のオーバーロードされたメソッドがあり、並べ替え要件に基づいてさまざまなメソッドを選択できます。

サンプル コードは次のとおりです。

import java.util.Arrays;

public class ArraySortExample {
    public static void main(String[] args) {
        int[] arr = {5, 2, 9, 1, 3};
        System.out.println("排序前:" + Arrays.toString(arr));
        Arrays.sort(arr);
        System.out.println("排序后:" + Arrays.toString(arr));
    }
}
ログイン後にコピー

実行結果は次のとおりです。

排序前:[5, 2, 9, 1, 3]
排序后:[1, 2, 3, 5, 9]
ログイン後にコピー
ログイン後にコピー

1.2ParallelSort メソッド

ParallelSort メソッドは並べ替えに使用されます。配列を並列にします。 sort メソッドと比較して、ソート操作をより速く完了でき、大規模な配列に適しています。

サンプル コードは次のとおりです。

import java.util.Arrays;

public class ArrayParallelSortExample {
    public static void main(String[] args) {
        int[] arr = {5, 2, 9, 1, 3};
        System.out.println("排序前:" + Arrays.toString(arr));
        Arrays.parallelSort(arr);
        System.out.println("排序后:" + Arrays.toString(arr));
    }
}
ログイン後にコピー

実行結果は次のとおりです。

排序前:[5, 2, 9, 1, 3]
排序后:[1, 2, 3, 5, 9]
ログイン後にコピー
ログイン後にコピー
  1. ソート アルゴリズム

ソートArrays クラスのメソッドは、最適化されたクイック ソート アルゴリズム (デュアル ピボット クイックソート) を使用して、ほとんどの場合に高いパフォーマンスを提供します。このアルゴリズムは分割統治の考え方に基づいており、2 つのピボット要素を選択して配列を 3 つの部分 (ピボット要素より小さい部分、ピボット要素と等しい部分、ピボットより大きい部分) に分割します。要素。次に、分割された 2 つの部分に対してソート操作が再帰的に実行されます。

クイック ソート アルゴリズムの時間計算量は O(nlogn) です。ここで、n は配列の長さです。

  1. 注意事項

配列の並べ替えに Arrays クラスを使用する場合は、次の点に注意する必要があります。

3.1 Comparable インターフェイスは次のことを行う必要があります。

#カスタム クラスのオブジェクト配列を並べ替える場合は、クラスで Comparable インターフェイスを実装し、compareTo メソッドをオーバーライドする必要があります。これにより、並べ替え中にオブジェクトのサイズを正しく比較できるようになります。

import java.util.Arrays;

class Student implements Comparable<Student> {
    private String name;
    private int score;

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    @Override
    public int compareTo(Student o) {
        return this.score - o.score;
    }

    @Override
    public String toString() {
        return name + ": " + score;
    }
}

public class StudentSortExample {
    public static void main(String[] args) {
        Student[] students = {new Student("Tom", 90), new Student("Jerry", 80)};
        System.out.println("排序前:" + Arrays.toString(students));
        Arrays.sort(students);
        System.out.println("排序后:" + Arrays.toString(students));
    }
}
ログイン後にコピー

実行結果は以下のとおりです。

排序前:[Tom: 90, Jerry: 80]
排序后:[Jerry: 80, Tom: 90]
ログイン後にコピー

3.2 並列ソートのパフォーマンスの最適化

並列ソートが有効な場合配列の長さがデフォルトのしきい値 (Arrays クラスで使用される 8192) より小さい場合、挿入ソート アルゴリズムがソートに使用されます。挿入ソート アルゴリズムは、小規模データのパフォーマンスが優れています。

並列ソートのパフォーマンスをさらに向上させるために、システム プロパティ

java.util.Arrays.useLegacyMergeSort

を true に設定することで、従来のマージ ソート アルゴリズムの使用を強制できます。これにより、並列ソートの場合に挿入ソートの使用が回避されます。

サンプル コードは次のとおりです。

import java.util.Arrays;

public class ArrayParallelSortPerformanceExample {
    public static void main(String[] args) {
        int[] arr = {5, 2, 9, 1, 3};
        System.out.println("排序前:" + Arrays.toString(arr));
        System.setProperty("java.util.Arrays.useLegacyMergeSort", "true");
        Arrays.parallelSort(arr);
        System.out.println("排序后:" + Arrays.toString(arr));
    }
}
ログイン後にコピー

概要

  1. この記事では、Java で配列の並べ替えに Arrays クラスを使用する方法について詳しく説明します。 sort メソッドを呼び出すことで配列をシリアルに並べ替えることができ、ParallelSort メソッドを呼び出すことで配列を並列に並べ替えることができます。並列ソートは逐次ソートよりもパフォーマンスが高く、大規模なデータに適しています。カスタム クラスのオブジェクト配列を並べ替えに使用する場合は、Comparable インターフェイスを実装する必要があります。同時に、
  2. java.util.Arrays.useLegacyMergeSort
プロパティを true に設定すると、並列ソートのパフォーマンスをさらに最適化できます。 Arrays クラスの並べ替え方法をマスターすると、プログラミングで配列の並べ替えの問題をより効率的に処理できるようになります。

以上がJava の Arrays クラスを使用して配列をソートする方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート