2012-05-11 3 views
1

を使用していない場合は、それが必要な私はどこでも任意のハッシュコレクションを使用していない、私はオブジェクトを持っていると私はちょうどは、2つのオブジェクトを比較する equalsメソッドをオーバーライドしたいハッシュコードをオーバーライドすることです私のプログラム。このような場合、hashCodeとequalsメソッドに契約が存在する理由、つまり、2つのオブジェクトが等しい場合、同じハッシュコードを持つ必要があります。 一般的なハッシュコード契約では、ハッシュを使用するコレクションにこのオブジェクトをキーとして入れて、それをオーバーライドする場合に、大文字と小文字を区別するべきではありませんか?は私が等号をオーバーライドし、任意のハッシュコレクション

+0

http://www.xyzws.com/javafaq/why-always-override-hashcode-if-overriding-equals/20 – Asaph

+0

FYI:EclipseやNetBeansなどの最新のJava IDEを使用している場合は、あなたのIDEが 'equals()'と 'hashCode()'メソッドを生成するようにしてください。 IDEはかなり良い仕事をしています。 – Asaph

+0

はすでにこのリンクをチェックしていましたが、私はハッシングコレクションを使用していないので、他の誰も私のコードで動作しないのはなぜですか? – banjara

答えて

1

他の誰も(または来月に)あなたのクラスを再利用することができないので、それは良い習慣(または必須)とみなされます。

equalsを必要とするオブジェクトは、たとえばキーとして使用する資格があり、ハッシュコードが必要です。

慣例として、字下げやパラメータやクラス名の場合と同じように、コードを管理するのに役立つこの種の規則を見ることができます。 equalsメソッドを見ている人は、(おそらくスーパークラスにある)であると正しく見なします。彼を驚かさないでください(それは一般的なルールです)。

つまり、ハッシュコードのメソッドを作成するのに役立つライブラリがたくさんあり、IDEのインスピレーションを得ることができます(Eclipseには、equalsメソッドやhashcodeメソッドを生成する関数があり、非常に冗長ですが、確認して修正してください)。

2

あなた(またはもっと重要なのは別の開発者)が将来ハッシュを使ってコレクションに入れたいかどうかわからないので、私ははいと言うでしょう。これは直接的であっても間接的であってもかまいません。つまり、あなたのオブジェクトはあなたが書かない別のメソッドに渡すことができ、他のメソッドはその実装でハッシュされたコレクションを使用します。

0

equalsを再定義する場合は、hashCodeを再定義する必要がありますが、あまりにも多くの労力を費やす必要はありません。単純にお気に入り番号(8675309など)を選択して、単にhashCodeメソッドに返すだけです。そうすることで、ハッシュされたコレクションが、オブジェクトが挿入されたときに、(ゆっくりですが)正しく動作するようになります。

関連する問題