018 オブジェクト指向の深化(オブジェクトの比較とハッシュコーディング) 025 解答例

import java.util.Objects;

// Student クラスは Comparable インターフェースを実装して、比較メソッド compareTo を提供します。
public class Student implements Comparable<Student> {

    private int id;
    private String name;
    private double gpa;

    // コンストラクタ
    public Student(int id, String name, double gpa) {
        this.id = id;
        this.name = name;
        this.gpa = gpa;
    }

    // ゲッターメソッド
    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public double getGpa() {
        return gpa;
    }

    // compareTo メソッドをオーバーライドして、Student オブジェクトの比較を実装します。
    @Override
    public int compareTo(Student other) {
        // id で比較する例。他の属性で比較する場合はその属性を利用する。
        return Integer.compare(this.id, other.id);
    }

    // equals メソッドをオーバーライドして、オブジェクトの内容の一致を確認します。
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return id == student.id &&
                Double.compare(student.gpa, gpa) == 0 &&
                Objects.equals(name, student.name);
    }

    // hashCode メソッドをオーバーライドして、ハッシュコードの生成を提供します。
    @Override
    public int hashCode() {
        return Objects.hash(id, name, gpa);
    }

    // toString メソッドをオーバーライドして、オブジェクトの文字列表現を提供します。
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", gpa=" + gpa +
                '}';
    }
}

この例では Comparable インターフェイスを実装して compareTo メソッドを提供し、equals メソッド、hashCode メソッド、toString メソッドもオーバーライドしています。これにより、Student クラスは他のクラスと比較が容易になります。

Comparable インターフェイス

Comparable インターフェイスは、Javaで比較可能なオブジェクトを表すためのインターフェイスです。このインターフェイスは、compareTo メソッドを提供しており、このメソッドを実装することで、オブジェクトの大小関係を定義することができます。

compareTo メソッドは、比較対象のオブジェクトと比較元のオブジェクトを引数として受け取り、大小関係を示す整数を返します。具体的には、以下のようなルールに従います。

  • 比較元が比較対象より小さい場合は負の整数
  • 比較元が比較対象と等しい場合はゼロ
  • 比較元が比較対象より大きい場合は正の整数

Comparableインターフェイスを実装することで、Javaコレクションやソートアルゴリズムなどが、オブジェクトの比較を行う際に compareTo メソッドを利用します。これにより、自分で定義したクラスのオブジェクトも、標準的な比較メソッドを提供することができます。

例えば、Comparable インターフェイスを実装した Student クラスでは、compareTo メソッドにより学生の比較が可能になります。これにより、Student オブジェクトを含むリストをソートするなどが容易に行えます。


Comparable インターフェイスは、Javaでオブジェクトの比較を可能にする重要な仕組みです。このインターフェイスを実装することで、自分で定義したクラスのオブジェクトに対しても、標準的な比較メソッドを提供できます。compareTo メソッドを実装することで、大小関係を定義し、Javaコレクションやソートアルゴリズムなどがオブジェクトの比較に利用できます。

Comparable インターフェイスの理解と実装は、オブジェクト指向プログラミングの中で重要な概念であり、Javaの様々な機能で活用されています。これをマスターすることで、柔軟かつ効果的なプログラミングが可能になります。比較可能なオブジェクトを提供することで、アプリケーションの様々な側面で品質と効率を向上させることが期待できます。

「018 オブジェクト指向の深化」問題集リスト