問題
次に、以下の 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);
}
// その他のメソッドやコードは省略
}
ヒント
- hashCodeメソッドの実装:
hashCode
メソッドは、オブジェクトのハッシュコードを生成するために使用されます。オブジェクトが等しい場合、hashCode
メソッドが同じ値を返すように実装する必要があります。 - getClassメソッドの利用:
getClass
メソッドを使用して、オブジェクトの実際のクラスを取得できます。これを利用して、異なる型のオブジェクトに対してクラスに基づいたハッシュコードを生成できます。 - hashCodeの計算方法: 異なる型のオブジェクトに対してハッシュコードを生成する場合、各型ごとに独自の計算方法を考える必要があります。異なる型が同じハッシュコードを持たないようにする工夫が必要です。
- 一貫性と性能のバランス:
hashCode
メソッドの実装においては、一貫性と性能のバランスが重要です。同じオブジェクトに対しては常に同じハッシュコードを返すことが期待されますが、パフォーマンスも考慮して高速に計算できる実装を心掛けます。
これらのヒントを参考にして、異なる型のオブジェクトに対して正確なハッシュコードを生成する実装を考えてみてください。
→解答例