2

コレクションの同等性をチェックするときに、誰でも明確にできますか?equals()メソッドは、着信オブジェクトまたはコレクションにあるオブジェクトで呼び出されます。例:セットまたはハッシュマップにオブジェクトobject1、object2、object3があり、object4という4番目のオブジェクトがSetに入ろうとするか、ハッシュマップの場合は既存の3つのオブジェクトと比較されると、この4番目のオブジェクトでequals()メソッドが呼び出されます。そして、既存の3つのオブジェクトが1つずつ渡されるか、またはその逆が真です。

4

4 に答える 4

6

答えはあまり重要ではありません (実装によって異なる場合がありますA.equals(B)) B.equals(A)。この契約を尊重しないことは、コレクションからの奇妙で一貫性のない動作のレシピです。

于 2012-05-08T12:39:42.063 に答える
3

非常に具体的なコレクションの実装を検討している場合を除き、知る方法はありません。それに頼ってはいけません。equals メソッドは再帰的である必要があります。つまり、いずれかが null でない限りx.equals(y)、 と同じ結果を返す必要があります。y.equals(x)

于 2012-05-08T12:40:17.837 に答える
2

a.equals(b) と b.equals(a) の間に違いはないはずです (a と b が null でない場合)。equals は対称である必要があります。どの形式 (a.equals(b) または b.equals(a)) が使用されているかという保証はありません。

于 2012-05-08T12:40:51.097 に答える
0

さて...Eclipseをチェックインしたばかりなので、着信オブジェクトのequals()メソッドが呼び出されます。Eclipseはrefを渡します。着信オブジェクトのequals()メソッド内の既存のオブジェクトの1つずつ。皆さんがおっしゃっているように、これはSunのequals()メソッドコントラクトで記述されており、equalsメソッドは反射的、対称的、推移的である必要があります。この質問は、2つの参照(等しいかどうかがチェックされている)が同じオブジェクトを指しているかどうかを何らかの方法で事前にチェックすれば、コレクションをより最適化できると考えていたときに思い浮かびました。もしそうなら、equals()メソッドとhashcode()メソッドをバイパスすることは理にかなっています。

于 2012-05-09T06:21:46.867 に答える