2017-08-23 8 views

答えて

3

単純な親ルールでは、の不変オブジェクトをとしてHashMapに使用します。それが可変であれば、その後、hashcode()値またはequals()条件が変更される場合があります

、あなたはあなたのHashMapからそれを取得することはできないだろう:

ので。

さらに正確には、equals()hashcode()を計算するために使用されるクラスフィールドは不変である必要があります。あなたが持っているだろう任意のハッシュベースのデータ構造のキーとして使用するにはequals()

  • を上書きする必要がありますあなたのクラスの2つのオブジェクトを比較するには

    • さて、あなたは独自のクラスを作成するとします上書きするhashcode()(もう一度、心の中で不変性を保つ)

    は、2つのオブジェクトがequal()されている場合は、そのhashcode()が同様に等しくなるべきであることを忘れないでください!

  • 1

    hashCode() -HashMapは、HashMapから値を取得するためのput(key、value)メソッドを格納し、取得(key)するメソッドを提供します。 put()メソッドを使用して(Key、Value)ペアを格納すると、HashMap実装はKeyオブジェクトをhashcodeで呼び出して、Entryオブジェクトが格納されるバケットを見つけるために使用されるハッシュを計算します。 get()メソッドを使用して値を取得すると、再びkeyオブジェクトが使用されてハッシュが計算され、その特定のキーが格納されているバケットを見つけるために使用されます。

    equals() equals()メソッドは、オブジェクトが等しいかどうかを比較するために使用されます。 HashMapキーオブジェクトが比較に使用される場合、equals()メソッドを使用してMapもハッシュ衝突を処理する方法を知っています(ハッシュ衝突とは同じハッシュ値を持つ複数のキーを意味するため、同じバケットに割り当てられます)。 hashCodeメソッドは、キーが格納されているバケットを見つけるのに役立ちます。equalsメソッドは、複数のキーと値のペアが1つのキーに格納されている可能性があるため、正しいキーを見つけるのに役立ちます。 。バケット

    1

    あなたは、それが適切にhashCodeequalsメソッドを定義しているようにHashMapで任意のオブジェクトを使用することができます - ハッシュメカニズムは、それらに依存しているため、それらは絶対的に重要である

    +0

    "正しく定義されたハッシュコードと等価"についてもっと詳しく説明する必要があると思います:) –

    +0

    @SarthakMittal質問は、 "そのオブジェクトのequalsメソッドとhashcodeメソッドをオーバーライドする必要がありますか? –

    +0

    はい、trueですが、equals()とhashcode()コントラクトを実行しても、キーとして可変オブジェクトを使用しないでください! :) –

    関連する問題