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

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

Linda Hamilton
リリース: 2024-12-26 13:28:13
オリジナル
899 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート