を使用していない場合は、それが必要な私はどこでも任意のハッシュコレクションを使用していない、私はオブジェクトを持っていると私はちょうどは、2つのオブジェクトを比較する equalsメソッドをオーバーライドしたいハッシュコードをオーバーライドすることです私のプログラム。このような場合、hashCodeとequalsメソッドに契約が存在する理由、つまり、2つのオブジェクトが等しい場合、同じハッシュコードを持つ必要があります。 一般的なハッシュコード契約では、ハッシュを使用するコレクションにこのオブジェクトをキーとして入れて、それをオーバーライドする場合に、大文字と小文字を区別するべきではありませんか?は私が等号をオーバーライドし、任意のハッシュコレクション
1
A
答えて
1
他の誰も(または来月に)あなたのクラスを再利用することができないので、それは良い習慣(または必須)とみなされます。
equalsを必要とするオブジェクトは、たとえばキーとして使用する資格があり、ハッシュコードが必要です。
慣例として、字下げやパラメータやクラス名の場合と同じように、コードを管理するのに役立つこの種の規則を見ることができます。 equalsメソッドを見ている人は、が(おそらくスーパークラスにある)であると正しく見なします。彼を驚かさないでください(それは一般的なルールです)。
つまり、ハッシュコードのメソッドを作成するのに役立つライブラリがたくさんあり、IDEのインスピレーションを得ることができます(Eclipseには、equalsメソッドやhashcodeメソッドを生成する関数があり、非常に冗長ですが、確認して修正してください)。
2
あなた(またはもっと重要なのは別の開発者)が将来ハッシュを使ってコレクションに入れたいかどうかわからないので、私ははいと言うでしょう。これは直接的であっても間接的であってもかまいません。つまり、あなたのオブジェクトはあなたが書かない別のメソッドに渡すことができ、他のメソッドはその実装でハッシュされたコレクションを使用します。
0
equals
を再定義する場合は、hashCode
を再定義する必要がありますが、あまりにも多くの労力を費やす必要はありません。単純にお気に入り番号(8675309など)を選択して、単にhashCode
メソッドに返すだけです。そうすることで、ハッシュされたコレクションが、オブジェクトが挿入されたときに、(ゆっくりですが)正しく動作するようになります。
関連する問題
- 1. オーバーライド等号(オブジェクトo)
- 2. NHibernateのオーバーライド==(等号)演算子?
- 3. 任意のIPと任意のポート番号を持つデータグラムソケットを聞くandroid
- 4. は、それが可能DFAは、任意の入力記号
- 5. .htaccessのID = __任意のID番号
- 6. 正規表現[任意の番号]
- 7. ジャンゴ:任意のモデルをオーバーライドしながら、モデルの保存方法
- 8. pythonプロジェクトオイラー6(任意番号付き)
- 9. routerLinkActiveは、任意のクエリが
- 10. は、任意の
- 11. Pythonを使用して任意の場所で等号付きの分割文字列
- 12. スカラ値オーバーライド:次のコード内のprintlnは(オーバーライド:</strong>または<strong>なし)動作任意
- 13. find numpyの配列が値リストの任意の値と等しい
- 14. 任意の等高線のスムーススプライン表示、f(長さ) - > x、y
- 15. 任意の「列」は
- 16. JavaScript番号は任意精度の数字ですか?
- 17. PHPは、値が別の結果セットの任意の値と等しいかどうかをチェックしますか?
- 18. 私は、フォルダを削除し、任意の子孫
- 19. WordPressは私がやっている、今の任意の順序
- 20. javascriptでは、複数の等号は何を意味しますか?
- 21. タイプは、コードのこの部分をしようとする機能の「任意の」オーバーライド型チェックが
- 22. 任意の '+'記号の後ろに任意の桁数を指定する正規表現
- 23. std:logic_errorの任意の行番号を取得
- 24. 私のクエリは機能しません。任意のアイデア
- 25. 等価オーバーライド問題
- 26. 内部に任意の記号を含む正規表現
- 27. 任意の行番号でエースエディタを埋め込む方法
- 28. 私は1つ(任意)を算出したいR
- 29. cx_Oracle.InterfaceError:私は、任意のOracleクライアントをインストールするには、Linuxの
- 30. JSEncryptは、「VaRのJSEncrypt宣言:任意のを、」私は、角4
http://www.xyzws.com/javafaq/why-always-override-hashcode-if-overriding-equals/20 – Asaph
FYI:EclipseやNetBeansなどの最新のJava IDEを使用している場合は、あなたのIDEが 'equals()'と 'hashCode()'メソッドを生成するようにしてください。 IDEはかなり良い仕事をしています。 – Asaph
はすでにこのリンクをチェックしていましたが、私はハッシングコレクションを使用していないので、他の誰も私のコードで動作しないのはなぜですか? – banjara