2017-03-14 21 views
0

私は宿題のための完璧なハッシングテーブルをコーディングする必要がありますが、私は理解するのが苦労しています:hashCode()の戻り値とhashTableのキーの違いは何ですか?

hashCodeの戻り値とハッシュテーブル内のキーの違いは、メソッドgetKey (a * x.hashCode()+ b)mod p)mod mここで、aとbはランダムな整数、pa素数、mは表。

インデックスはH(キー)で与えられているので、私の意見ではx.hashCode()がキーであることを意味しますが、キーと値(整数のみ)が同じであるためわかりません。

+0

の可能性のある重複で作業を始めると

これは本当に面白い[ハッシュテーブルはどのように機能するの? ](http://stackoverflow.com/questions/730620/how-does-a-hash-table-work) – dnault

+3

2つのキーは等しくなくても同じハッシュコードを持つことができます。 –

+0

キーは、キータイプのオブジェクトです。ハッシュコードはキーではなく、キーに関連付けられた番号です。 –

答えて

0

hashcode()メソッドは、特定のインスタンスに対してオブジェクトのハッシュメソッドを適用した場合に期待される結果を生成しますが、キーはオブジェクト自体です。

オブジェクトは別の複合/複合オブジェクト(別のHashMapなど)でもかまいません。 hashcode()equals()の合理的な実装をしている限り、うまく動作します。

2つのインスタンスが同じhashcode()の結果を生成し、equals()がその結果(タイプチェックを除いて、もちろんテストの一部でもある)と比較した場合、オブジェクトは等しい/同一であるとみなされます。あなたが(等号をハッシュコード/平等ではなく、むしろ順序に基づいていない、Comparable sおよびComparator s)はツリーマップ

+0

これは、 'equals'、 'hashCode'、および' compareTo'(使用されている場合)が一貫していなければならないことが重要な理由です。理想的には 'toString'でしょう。 –

関連する問題