為什麼Java 中String 的hashCode() 使用31 作為乘數
在Java 中,String 物件的hashCode() 方法採用以下方式公式:
其中s[i] 是第i 個字符,n是字串長度,^ 表示求冪。這就提出了一個問題:為什麼專門選擇 31 作為乘數?
素數乘數的基本原理
文件建議使用相對較大的素數作為乘數來最大限度地減少哈希表中的衝突。當不同的物件產生相同的雜湊碼時,就會發生衝突,可能會導致效能問題。素數提供了更好的雜湊碼分佈,減少了衝突的可能性。
為什麼不是其他質數?
在其他素數中選擇31 個歸因於兩個因素:
因此,31 滿足作為素數的兩個標準,以防止衝突,同時為 Java 中的 String 物件實作高效的雜湊操作。
以上是為什麼Java的`String.hashCode()`要用31作為它的乘數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!