ホームページ >Java >&#&チュートリアル >Java の文字列の「hashCode()」が乗数として 31 を使用するのはなぜですか?

Java の文字列の「hashCode()」が乗数として 31 を使用するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-26 13:28:13929ブラウズ

Why Does Java's `hashCode()` for Strings Use 31 as a Multiplier?

Java の String の hashCode() メソッドで乗数として 31 が使用されるのはなぜですか?

Java ドキュメントでは、String オブジェクトの計算を指定しています。ハッシュ コードは次のとおりです:

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

ここでs[i] は文字列の i 番目の文字、n は文字列の長さ、^ は累乗を表します。この式には、固定乗数 31 が組み込まれています。

乗数として 31 を使用する根拠

Joshua Bloch の尊敬する著作「Effective Java」によれば、31 の選択は乗数はいくつかに依存するため、要素:

  • 奇数素数: 31 は奇数の素数であるため、乗算の結果がオーバーフローになっても情報が失われないことが保証されます (偶数乗算器を使用する場合とは異なり、これはシフトと同等です)。 ).
  • 伝統: 乗数として素数を使用するのは次のとおりです。
  • パフォーマンスの最適化: 31 には、パフォーマンスの向上を可能にする独自のプロパティがあります: 31 * i は (i

以上がJava の文字列の「hashCode()」が乗数として 31 を使用するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。