ハッシュコード値を決定する方法は?最近、「17は有効なハッシュコードですか?」というインタビューの質問に直面しました。ハッシュコード値を定義するメカニズムはありますか?または、ハッシュコード値に任意の数値を指定できますか?
質問する
602 次
3 に答える
3
さまざまなオブジェクトがハッシュ テーブルのさまざまな位置に保存されるように、ハッシュコードは適切に分散されている必要があります (そうしないと、パフォーマンスが低下する可能性があります)。
その時点から、(32 ビットの符号付き整数であるという意味で) 「有効な」ハッシュ コードである一方で、ハッシュ関数がどのように定義されたかは疑わしいものです。
たとえば、文字列をハッシュするための単純なアプローチは、各文字の値を追加するだけです。これにより、単純な文字列 ("tar" と "rat" など、合計すると同じ値になる) に対して同様のハッシュ値が得られます。
一般的なトリックは、単純な入力が異なる値を返すように、各値に小さな素数を掛けることです。
int result = 1;
result = 31 * result + a;
result = 31 * result + b;
また
int h=0;
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
(後者は の JRE 実装からString.hashCode
)
于 2013-02-25T06:54:19.393 に答える
0
はい、17
完全に有効なハッシュコードです。
ハッシュコードを取得するためにどの方法を選択しても、オブジェクトの状態が同じである限り、常に同じ整数を返す必要があります。
于 2013-02-25T06:54:02.487 に答える
0
や17は有効です。通常、リンクに示されているような素数が使用されます。主キーであるエンティティの ID を使用してハッシュコードを実装できます。
public int hashCode()
{
int result = 17;
result = 37 * result + (getId() == null ? 0 : this.getId().hashCode());
return result;
}
于 2013-02-25T06:59:03.383 に答える