2016-03-27 12 views
1

HashSet1.retainAll(HashSet2);はどのように舞台裏で機能しますか?どのようにHashSet1.retainAll(HashSet2);舞台裏で働く?

私は同一のパラメータを持つオブジェクトを2つの異なるHashSetに追加していますが、上記の使用時に正しい結果が得られないようです。つまり、実際にはオブジェクト内の同じパラメータであることは検出されません。

上記の方法は、セット内のオブジェクトの実際のアドレスを比較していますか?

もしそうなら、どうやってオブジェクトのパラメータを比較することができますか?

おそらくオーバーライドは等しいですか?

+5

'hashCode'と' equals'メソッドをオーバーライドする必要があります。 – marstran

+0

ありがとう@marstran、素晴らしい仕事をした。 –

+1

ちなみに、期待どおりに動作させるには、2つの方法の契約も満たす必要があります。 2つのオブジェクトが等しい場合、同じハッシュコードを持つ必要があります。ただし、2つのオブジェクトが同じハッシュコードを持つ場合、(ハッシュの衝突のために)同じではない可能性があります。 – marstran

答えて

0

私のクラスでhashCodeと.equalsメソッドを上書きしました。このため、オブジェクトのアドレスではなく正しいパラメータを比較するメソッドが生成されています。この問題に関する彼のアドバイスについては、@marstranに感謝します。

関連する問題