日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

為什么Java String哈希函數乘數為31?

來源: 責編: 時間:2024-04-26 08:49:05 169觀看
導讀哈嘍,大家好,我是了不起。今天給大家介紹一個底層數字問題——為什么Java String哈希函數乘數為31?1、源碼重現在這個實現中,31 被用作乘數。那么,為什么選擇 31 作為乘數呢?2、降低哈希沖突31 是一個質數,相信大家學過數學

哈嘍,大家好,我是了不起。VR228資訊網——每日最新資訊28at.com

今天給大家介紹一個底層數字問題——為什么Java String哈希函數乘數為31?VR228資訊網——每日最新資訊28at.com

1、源碼重現

圖片VR228資訊網——每日最新資訊28at.com

在這個實現中,31 被用作乘數。那么,為什么選擇 31 作為乘數呢?VR228資訊網——每日最新資訊28at.com

2、降低哈希沖突

31 是一個質數,相信大家學過數學的,質數是這樣定義的:VR228資訊網——每日最新資訊28at.com

指在大于1的自然數中,除了1和它本身以外沒有任何正因數的自然數。VR228資訊網——每日最新資訊28at.com

在哈希函數中,使用質數作為乘數可以提高哈希值的分布均勻性。如果使用非質數作為乘數,那么哈希值的分布可能會出現偏斜。VR228資訊網——每日最新資訊28at.com

例如,如果使用 10 作為乘數,那么所有以 5 為尾數的字符串的哈希值將是相同的。這會導致哈希沖突的可能性增加。VR228資訊網——每日最新資訊28at.com

3、提高哈希計算速度

在 Java 中,int 類型的變量占用 32 位。VR228資訊網——每日最新資訊28at.com

31 是一個奇數,因此 31 * i 的結果可以只使用 31 位來表示。這意味著在計算哈希值時,可以使用位運算來代替乘法運算。VR228資訊網——每日最新資訊28at.com

位運算比乘法運算要快得多。VR228資訊網——每日最新資訊28at.com

因此,使用 31 作為乘數可以提高哈希計算速度。VR228資訊網——每日最新資訊28at.com

4、31是一個良好的折中方案

在實際應用中,使用 31 作為乘數可以提供良好的哈希值分布和計算速度。當然,也可以使用其他質數作為乘數。例如,37 和 43 也是不錯的選擇。VR228資訊網——每日最新資訊28at.com

但是,31 是一個相對較小的質數,因此它在計算速度方面具有優勢。此外,31 也是一個常用的質數,因此在許多其他哈希函數中也得到了使用。VR228資訊網——每日最新資訊28at.com

當然,31 并不是一個完美的乘數。在某些情況下,使用其他質數可能會更好。但是,對于大多數應用程序來說,31 都是一個不錯的選擇。VR228資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-85697-0.html為什么Java String哈希函數乘數為31?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 詳解JavaScript中的層疊規則(CSS Specificity)

下一篇: 從零到生產:Go在Google的歷程

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 青神县| 斗六市| 图们市| 镇赉县| 波密县| 武宁县| 睢宁县| 大悟县| 新竹县| 郴州市| 观塘区| 安岳县| 湘潭市| 晴隆县| 新津县| 扶风县| 突泉县| 武宁县| 吉林市| 济南市| 株洲县| 新乡县| 潍坊市| 闽侯县| 宁安市| 宣武区| 寻甸| 临江市| 赤水市| 大渡口区| 凯里市| 鸡泽县| 称多县| 西平县| 磴口县| 沅江市| 英吉沙县| 万宁市| 建昌县| 醴陵市| 驻马店市|