2017-01-06 6 views
-1

私はhashcode()とequals()の間の契約を理解しています。私が理解していないことは、同じクラスを計算中にクラス(豆)のすべてのフィールドを含める必要があるということですか?例えばBeanオブジェクトをハッシュベースのコレクションで使用する必要があり、ソートが必要です。 Beanクラスには〜25個のフィールドが含まれています。オーバーライドするhashcode()とequals()を計算する際に、すべてのフィールドを考慮する必要がありますか?

HashCode()とeuqals()をオーバーライドするときに、そのフィールドをすべて考慮する必要がありますか?

+4

番号フィールドだけを検索します:場合には削除したい場合はフィールドにしようとか、コメント欄でのDimitryからの提案を言っています) - そしてequalsについては、それはあなた次第です。デフォルトのオブジェクト#は、等しい参照のみをテストします。 –

+0

@Elliot私の理解によれば、ベストプラクティスはhashcode()とequals()で同じフィールドを使うことです。 – Diganta

+1

絶対に必要な*と*ベストプラクティス*の違いを理解していますか?ここで何を求めていますか? –

答えて

1

必ずしもすべてのメンバーを使用する必要はありませんが、オブジェクトからオブジェクトに変わるすべての変数を保持することをお勧めします。他の一意のフィールドがある場合は、オブジェクトからオブジェクトへと大きく変化しない定数や変数を削除することができます。

私はこのプロジェクトの1つでは、オブジェクトからオブジェクトに固有の「id」フィールドのみを使用してハッシュコードを計算しています。

編集:ハッシュコードのために(https://projectlombok.org/features/EqualsAndHashCode.html は「同一性」を決定するために必要なクリーナー

0

絶対に必要でない限り、equalsメソッドやhashCodeメソッドをオーバーライドしないでください。

このようにする必要がある場合は、オブジェクトを「ユニーク」にするフィールドのみを使用してください。

オブジェクトを並べ替えるには、Comparator or Comparableインターフェイスを調べることができます。このインターフェイスを使用して、特定のフィールドまたは一連のフィールドのオブジェクトを比較できます。

関連する問題