DEV Community

TANIAOKA, Akihiro
TANIAOKA, Akihiro

Posted on

9章2

このJavaのコードは、Sample オブジェクトのリストを特定の方法でソートするプログラムです。Sample クラスには idname という2つのプライベート属性があり、SampleComparator クラスは Comparator<Sample> インターフェースを実装しており、2つの Sample オブジェクトを id 属性の値で比較しています。Main クラスの main メソッドでは、3つの Sample オブジェクトを含む配列を作成し、それをリストに変換しています。その後、Collections.sort() メソッドを使ってこのリストをソートし、ソートされたリストの各 name 属性を出力しています。

では、コードにコメントを加えて、各部分の動作を説明していきます。

// Sample クラス定義
public class Sample {
    private int id; // オブジェクトのID
    private String name; // オブジェクトの名前

    // コンストラクタ
    public Sample(int id, String name) {
        this.id = id; // IDの初期化
        this.name = name; // 名前の初期化
    }

    // IDを取得するメソッド
    public int getId() {
        return id;
    }

    // 名前を取得するメソッド
    public String getName() {
        return name;
    }
}

// Sample オブジェクトを比較するためのComparator実装
import java.util.Comparator;

public class SampleComparator implements Comparator<Sample> {
    @Override
    public int compare(Sample s1, Sample s2) {
        if (s1.getId() < s2.getId()) {
            return 1; // s1のIDがs2より小さい場合は1を返す(降順)
        }
        if (s2.getId() < s1.getId()) {
            return -1; // s2のIDがs1より小さい場合は-1を返す(降順)
        }
        return 0; // IDが等しい場合は0を返す
    }
}

// メインクラスとエントリーポイント
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        // Sample オブジェクトの配列を初期化
        Sample[] samples = {
            new Sample(2, "B"), // IDが2のオブジェクト
            new Sample(3, "C"), // IDが3のオブジェクト
            new Sample(1, "A")  // IDが1のオブジェクト
        };

        // 配列からリストへの変換
        List<Sample> list = new ArrayList<>(Arrays.asList(samples));

        // SampleComparatorを使ってリストをソート
        list.sort(new SampleComparator());

        // ソートされたリストの各要素の名前を出力
        for (Sample s : list) {
            System.out.println(s.getName());
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

SampleComparator において、compare メソッドはIDが小さい方を後ろにするため、IDが大きいものから小さいものの順にソートされます。つまり、IDが3, 2, 1の順となります。それに対応する名前は "C", "B", "A" の順になりますので、答えはCです。

Top comments (0)