018 オブジェクト指向の深化(オブジェクトの比較とハッシュコーディング) 024 問題

問題

次に、以下の Library クラスがあります。このクラスは複数の書籍を管理します。Library クラスには重複する書籍を管理しないようにするために必要な Set を使用しています。しかし、Book クラスの equals メソッドと hashCode メソッドが正しく実装されていない場合、Set が正しく機能しない可能性があります。Library クラスが正しく動作するように、Book クラスの equals メソッドと hashCode メソッドを修正してください。

import java.util.HashSet;
import java.util.Set;

public class Library {
    private Set<Book> books;

    public Library() {
        this.books = new HashSet<>();
    }

    public void addBook(Book book) {
        books.add(book);
    }

    public boolean containsBook(Book book) {
        return books.contains(book);
    }

    // その他のメソッドやコードは省略
}

ヒント

  1. hashCodeメソッドの実装: hashCodeメソッドは、オブジェクトのハッシュコードを生成するために使用されます。オブジェクトが等しい場合、hashCodeメソッドが同じ値を返すように実装する必要があります。
  2. getClassメソッドの利用: getClassメソッドを使用して、オブジェクトの実際のクラスを取得できます。これを利用して、異なる型のオブジェクトに対してクラスに基づいたハッシュコードを生成できます。
  3. hashCodeの計算方法: 異なる型のオブジェクトに対してハッシュコードを生成する場合、各型ごとに独自の計算方法を考える必要があります。異なる型が同じハッシュコードを持たないようにする工夫が必要です。
  4. 一貫性と性能のバランス: hashCodeメソッドの実装においては、一貫性と性能のバランスが重要です。同じオブジェクトに対しては常に同じハッシュコードを返すことが期待されますが、パフォーマンスも考慮して高速に計算できる実装を心掛けます。

これらのヒントを参考にして、異なる型のオブジェクトに対して正確なハッシュコードを生成する実装を考えてみてください。

解答例

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