2009-07-02 18 views
0

この質問(Efficient hashCode() implementation)との関連でもう1つ質問があります。ハッシュコードの実装

私は "値"クラスを持ち、インスタンスはデータベースに保持されています。したがって、このクラスのインスタンスはすべて一意のIDを持ちます。

結果として、このIDを返すだけで、ハッシュコードメソッド(および関連するequalsメソッド)が実装されました。

Eclipseのハッシュコードジェネレータを使用して生成のための唯一のID属性を使用するようにEclipseを伝えるとき、私は次のような方法があります。

@Override 
    public int hashCode() { 
      final int prime = 31; 
      int result = 1; 
      result = prime * result + id; 
      return result; 
    } 

を私は、このIDは一意である知っているので、単純にIDを返すことは、より効率的だと思います。私は正しい?事前

+0

結果が1の場合は、なぜ結果を調べるのですか?あなたは実際に機能する "return 31 + id;"です。 – Tom

+0

IDの分布を変更しないので、あなたは31を取り除くこともできます。要するに、実装したハッシュコードは特別な処理を行わず、idを返すだけです。それが言われている、私は "より良い"とは思わない。 – Tom

答えて

5

これが正しいことをするIDの一意性ではありません。それは、同等性チェックに使用されていることです。等価チェックに使用されるものです。

Eclipseからの定型文は、複数のフィールドを同じにする場合にのみ実際に関係します。

+0

+1は一意ではないことを強調しています:-)。まあまあ。 – Tom

3

おかげであなたは絶対にアイデンティティの一意性を目指している場合は、はい。

ハッシュ関数(つまり、intのすべての値)の可能な範囲で値をランダムに配布しているわけではないので、ハッシュに依存するコードではパフォーマンスが問題になる可能性がある均等に分配される。

p.s.おそらく、これらのユニークなintはおそらくあなたのdbのアイデンティティ値であるという私の前提から来ています。彼らが本当にランダムに配布されている場合は、私の警告を無視してください。

+0

はい、もちろん私の目的です。ありがとう –

+1

java.util.HashMapはすでに配布を改善するためにハッシュコードに補足的なハッシュ関数を適用しているので、配布は問題ではありません。 –

+0

お勧めですが、HashMapはhashCode()を利用する唯一のコードではありませんので、配布が問題になる可能性があります。 – GaryF

関連する問題