3

arrayList があり、contains(Thing o) メソッドを使用してこの 2 つのオブジェクトの等価性をチェックしたいのですが、Thing クラスの equals() メソッドをオーバーライドしますが、contains メソッドを呼び出すと機能しません! これは私のモノのクラスです:

public class Thing{

private int id;

//getter setter

@Override
public boolean equals(Object o) {
    if(!(o instanceof Thing))
        return false;
    if(id == ((Thing)o).getId())
        return true;
    return false;
}
}

hashCode() メソッドもオーバーライドする必要がありますか? はいの場合、それをオーバーライドする方法は?

4

3 に答える 3

4

オーバーライドする必要がありますhashCodeArrayListクラスは メソッドを使用しないので、hashCodeは必要ありませんが、 、、または を使用する他のコレクションでクラスを使用しようとすると、が一貫していないため、プログラムが壊れます。HashMapHashSethashCodehashCodeequals

この場合の hashCode の単純な実装は次のようになります。

public int hashCode() {
    return id;
}
于 2013-08-17T08:41:45.590 に答える
1

equals() をオーバーライドする場合は、常に hashCode() もオーバーライドする必要があります。Eclipse IDE を使用すると、そのメソッドを簡単に生成できます。メニュー -> ソース -> hashCode() と equals() を生成

于 2013-08-17T08:47:52.600 に答える