2

LinkedHashSet とその contains メソッドでこの問題が発生しています。まとめさせていただきます。

このクラス C1 には、4 つの文字列属性、それぞれのゲッターとセッター、および eclipse によってデフォルトで指定されている equals() メソッドと hashCode() メソッドがあります。

次に、LinkedHashSet 型の 1 つの属性を持ち、それにアクセスするための getSet() メソッドを持つ別のクラス C2 があります。

C1 クラス (オブジェクト c1 など) の 1 つのインスタンスを作成し、それをクラス C2 のインスタンス c2 に追加すると、すべて問題ありません... 私は次のことを行います。

C1 c1 = new C1("a", "b", "c", "d");
C2 c2 = new C2();
c2.getSet().add(c1);

ここで、適切な set メソッドを使用して c1 の最初の属性に別の値を設定すると、c2.getSet() に要素 c1 が含まれているかどうかを確認しようとしますが、常に false が返されます。しかし、オブジェクトのハッシュコードが変更され、セット内のハッシュコードが同じであり、明らかに、contains メソッドの equals テストが失敗しています...

ここで何が起こっているのか誰か理解していますか?何が間違っている可能性がありますか?Equals と HashCode()?

前もってありがとう、乾杯

4

2 に答える 2