ハッシュマップを使用する Java プログラムを作成しています。ハッシュマップの仕組みを知っています。Iadd(key,object)
の場合、Java はキーのハッシュコードを見つけ、それを使用してobject
.
これで、 の独自のhashcode
実装ができましたobject
。そして、これをキーとして与えたいと思います - のようなものadd(object.hashcode(),object)
です。
Javaが再びハッシュするのを防ぐことは可能object.hashcode()
ですか? 私はすでにハッシュコードのhashcode()
呼び出しhashcode()
を実装しているため、時間の無駄になります。
質問する
662 次
2 に答える
6
hashCode()
その方法は、計算されたハッシュ値をキャッシュするように実装することです。これは、オブジェクトが不変であること、または少なくともフィールドが寄与し、オブジェクトをマップに配置した後に変更されないことhashCode
を意味することに注意してください。equals
ハッシュコードをキーとして使用する必要はありません。さらに、実際にはハッシュテーブルが機能するはずの方法ではないため、これはほぼ間違いなく間違った方法です。ハッシュ衝突はゲームの名前であるため、ハッシュコードはバケットをアドレス指定するためにのみ使用されますが、(名前がすべてを示しています) バケットには 1 つではなく、任意の数のオブジェクトが含まれます。equals
探していたものを正確に見つけるには、これらをチェックする必要があります。
ハッシュコードをキーとして使用するという最初のアイデアを考えると、実際にはマップの後ではなく、HashSet
. オブジェクトをコレクションに追加するだけで、後でオブジェクトの存在を確認したいと思うでしょう。それがセットです。
于 2012-11-15T16:50:47.237 に答える
1
独自の実装がない限り、それはできません。その理由は、get メソッドを使用するときにオブジェクトを選択するためにハッシュが使用されるためです。
于 2012-11-15T16:50:21.983 に答える