Set コレクションはオブジェクトが重複しているかどうかをどのように判断するのか

Set コレクションでは、オブジェクトが繰り返されるかどうかの判断は、オブジェクトの hashCode() メソッドとquals() メソッドの実装によって決まります。要素が Set コレクションに追加されると、要素の hashCode() メソッドが最初に呼び出されてそのハッシュ値が取得され、ハッシュ値が同じであればセット内の既存の要素のハッシュ値と比較されます。 、要素のequals()メソッドを呼び出して比較します。equals()メソッドもtrueを返す場合、要素は重複しているとみなされ、コレクションに追加されません。

したがって、オブジェクトを Set コレクションに追加し、そのオブジェクトが重複しているかどうかを正確に判断できるようにしたい場合は、オブジェクトの hashCode() メソッドとquals() メソッドの実装が次の条件を満たしていることを確認する必要があります。要件、つまり:

  1. hashCode() メソッドによって返されるハッシュ値は安定している必要があります。つまり、2 つのオブジェクトの equals() メソッドが true を返す場合、それらの hashCode() メソッドの戻り値は等しい必要があります。
  2. equals() メソッドは、2 つのオブジェクトが等しいかどうかを正しく比較する必要があります。つまり、2 つのオブジェクトのすべてのプロパティ値が等しい場合、equals() メソッドは true を返す必要があります。

クラスが hashCode() メソッドとquals() メソッドをオーバーライドしない場合、Object クラスの実装がデフォルトで使用されますが、これは通常は必要ありません。したがって、カスタム クラスを実装するときは、hashCode() メソッドとquals() メソッドを正しくオーバーライドするようにしてください。

Supongo que te gusta

Origin blog.csdn.net/qq_42133976/article/details/130417277
Recomendado
Clasificación