首頁 > Java > java教程 > 為什麼 Java 的字串「hashCode()」使用 31 作為乘數?

為什麼 Java 的字串「hashCode()」使用 31 作為乘數?

Linda Hamilton
發布: 2024-12-26 13:28:13
原創
895 人瀏覽過

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

Java 字串的 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板