Javaにおけるソート手法

JavaBeginner
オンラインで実践に進む

はじめに

ソート(並べ替え)はコンピュータサイエンスにおいて不可欠な操作であり、Javaには様々なデータ構造をソートするための組み込みメソッドが用意されています。Javaには、異なるデータ構造をソートするためのクラスがいくつか存在します。本実験では、配列、コレクション、およびユーザー定義クラスのインスタンスをソートする方法について学習します。

配列のソート

配列は、同じ型のデータを順序立てて格納するために使用されるシンプルなデータ構造です。Arrays クラスの組み込みメソッドである sort() を使用することで、配列をソートできます。

~/project ディレクトリに Sorting.java を作成(または上書き)し、以下のコードを記述してください。

import java.util.Arrays;

public class Sorting {
    public static void main(String[] args) {
        int[] arr = {7, 9, 1, 0, 2, 5, 6, 11};
        System.out.println("Array Before Sorting: " + Arrays.toString(arr));
        Arrays.sort(arr);
        System.out.println("Array After Sorting: " + Arrays.toString(arr));
    }
}

このコードを実行するには、ターミナルで ~/project ディレクトリに移動し、以下のコマンドを実行します。

javac Sorting.java
java Sorting

このコードは配列を昇順にソートします。降順にソートしたい場合は、Comparator インターフェースを使用してソートする必要があります。

コレクションのソート

Javaには、リスト(List)、セット(Set)、マップ(Map)などのコレクションをソートするための sort() メソッドを持つ Collections クラスが用意されています。この関数の動作モデルは、Arrays クラスの sort() メソッドと似ています。

~/project ディレクトリに Sorting.java を作成(または上書き)し、以下のコードを記述してください。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Sorting {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();
        list.add(6);
        list.add(3);
        list.add(8);
        list.add(1);
        list.add(9);

        System.out.println("List before sorting: " + list);

        Collections.sort(list);
        System.out.println("List after sorting: " + list);
    }
}

このコードを実行するには、ターミナルで ~/project ディレクトリに移動し、以下のコマンドを実行します。

javac Sorting.java
java Sorting

セットのソート

セット(Set)は、重複のない順序付けされていないデータを格納するために使用されます。セットを Collections クラスの sort() メソッドで直接ソートすることはできません。しかし、セットのすべての要素をリストに転送してからそのリストをソートすることで、順序付けされたデータを確認することができます。

~/project ディレクトリに Sorting.java を作成(または上書き)し、以下のコードを記述してください。

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Sorting {
    public static void main(String[] args) {
        Set<Integer> set = new HashSet<Integer>();
        set.add(6);
        set.add(3);
        set.add(-2);
        set.add(1);
        set.add(9);

        List<Integer> list = new ArrayList<Integer>(set);
        Collections.sort(list);
        System.out.println("Set after sorting: " + list);
    }
}

このコードを実行するには、ターミナルで ~/project ディレクトリに移動し、以下のコマンドを実行します。

javac Sorting.java
java Sorting

このコードの出力は、ソートされた整数のリストになります。

マップのソート

マップ(Map)は、キーと値のペアを格納するために使用されます。マップはキーまたは値に基づいてソートできます。TreeMap を使用して、キーと値のペアをソートされた順序で格納することも可能です。

~/project ディレクトリに Sorting.java を作成(または上書き)し、以下のコードを記述してください。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class Sorting {
    public static void main(String[] args) {
        Map<Integer, String> map = new TreeMap<Integer, String>();
        map.put(6, "Apple");
        map.put(3, "Banana");
        map.put(1, "Mango");
        map.put(9, "Orange");

        System.out.println("Map before sorting: " + map);

        // Sorting by keys
        Map<Integer, String> sortedByKeyMap = new TreeMap<Integer, String>(map);
        System.out.println("Map after sorting by keys: " + sortedByKeyMap);

        // Sorting by value
        List<Map.Entry<Integer, String>> list = new ArrayList<Map.Entry<Integer, String>>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<Integer, String>>() {
            public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) {
                return (o1.getValue()).compareTo(o2.getValue());
            }
        });

        Map<Integer, String> sortedByValueMap = new LinkedHashMap<Integer, String>();
        for (Map.Entry<Integer, String> entry : list) {
            sortedByValueMap.put(entry.getKey(), entry.getValue());
        }
        System.out.println("Map after sorting by values: " + sortedByValueMap);
    }
}

このコードを実行するには、ターミナルで ~/project ディレクトリに移動し、以下のコマンドを実行します。

javac Sorting.java
java Sorting

このコードは、マップをキーと値に基づいてそれぞれソートします。

まとめ

本実験では、Javaにおける様々なデータ構造のソート方法を実演しました。配列、コレクション、マップのソート方法を学びました。また、Comparable および Comparator インターフェースを使用して、ユーザー定義クラスのオブジェクトをソートする方法も学習しました。リストや配列のソートには Collections クラスと Arrays クラスの sort() メソッドを使用しました。最後に、マップを値やキーに基づいてソートする方法を学びました。