当前位置:首页 > 科技  > 软件

为什么Java String哈希函数乘数为31?

来源: 责编: 时间:2024-04-26 08:49:05 247观看
导读哈喽,大家好,我是了不起。今天给大家介绍一个底层数字问题——为什么Java String哈希函数乘数为31?1、源码重现在这个实现中,31 被用作乘数。那么,为什么选择 31 作为乘数呢?2、降低哈希冲突31 是一个质数,相信大家学过数学

哈喽,大家好,我是了不起。PG128资讯网——每日最新资讯28at.com

今天给大家介绍一个底层数字问题——为什么Java String哈希函数乘数为31?PG128资讯网——每日最新资讯28at.com

1、源码重现

图片PG128资讯网——每日最新资讯28at.com

在这个实现中,31 被用作乘数。那么,为什么选择 31 作为乘数呢?PG128资讯网——每日最新资讯28at.com

2、降低哈希冲突

31 是一个质数,相信大家学过数学的,质数是这样定义的:PG128资讯网——每日最新资讯28at.com

指在大于1的自然数中,除了1和它本身以外没有任何正因数的自然数。PG128资讯网——每日最新资讯28at.com

在哈希函数中,使用质数作为乘数可以提高哈希值的分布均匀性。如果使用非质数作为乘数,那么哈希值的分布可能会出现偏斜。PG128资讯网——每日最新资讯28at.com

例如,如果使用 10 作为乘数,那么所有以 5 为尾数的字符串的哈希值将是相同的。这会导致哈希冲突的可能性增加。PG128资讯网——每日最新资讯28at.com

3、提高哈希计算速度

在 Java 中,int 类型的变量占用 32 位。PG128资讯网——每日最新资讯28at.com

31 是一个奇数,因此 31 * i 的结果可以只使用 31 位来表示。这意味着在计算哈希值时,可以使用位运算来代替乘法运算。PG128资讯网——每日最新资讯28at.com

位运算比乘法运算要快得多。PG128资讯网——每日最新资讯28at.com

因此,使用 31 作为乘数可以提高哈希计算速度。PG128资讯网——每日最新资讯28at.com

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

在实际应用中,使用 31 作为乘数可以提供良好的哈希值分布和计算速度。当然,也可以使用其他质数作为乘数。例如,37 和 43 也是不错的选择。PG128资讯网——每日最新资讯28at.com

但是,31 是一个相对较小的质数,因此它在计算速度方面具有优势。此外,31 也是一个常用的质数,因此在许多其他哈希函数中也得到了使用。PG128资讯网——每日最新资讯28at.com

当然,31 并不是一个完美的乘数。在某些情况下,使用其他质数可能会更好。但是,对于大多数应用程序来说,31 都是一个不错的选择。PG128资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-85697-0.html为什么Java String哈希函数乘数为31?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 详解JavaScript中的层叠规则(CSS Specificity)

下一篇: 从零到生产:Go在Google的历程

标签:
  • 热门焦点
  • 俄罗斯:将审查iPhone等外国公司设备 保数据安全

    iPhone和特斯拉都属于在各自领域领头羊的品牌,推出的产品也也都是数一数二的,但对于一些国家而言,它们的产品可靠性和安全性还是在限制范围内。近日,俄罗斯联邦通信、信息技术
  • Redmi Pad评测:红米充满野心的一次尝试

    从Note系列到K系列,从蓝牙耳机到笔记本电脑,红米不知不觉之间也已经形成了自己颇有竞争力的产品体系,在中端和次旗舰市场上甚至要比小米新机的表现来得更好,正所谓“大丈夫生居
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • K6:面向开发人员的现代负载测试工具

    K6 是一个开源负载测试工具,可以轻松编写、运行和分析性能测试。它建立在 Go 和 JavaScript 之上,它被设计为功能强大、可扩展且易于使用。k6 可用于测试各种应用程序,包括 Web
  • 2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • 使用LLM插件从命令行访问Llama 2

    最近的一个大新闻是Meta AI推出了新的开源授权的大型语言模型Llama 2。这是一项非常重要的进展:Llama 2可免费用于研究和商业用途。(几小时前,swyy发现它已从LLaMA 2更名为Lla
  • 自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
  • 消息称小米汽车开始筛选交付中心:需至少120个车位

    IT之家 7 月 7 日消息,日前,有微博简介为“汽车行业从业者、长三角一体化拥护者”的微博用户 @长三角行健者 发文表示,据经销商集团反馈,小米汽车目前
  • 三星显示已开始为AR设备研发硅基LED微显示屏

    7月18日消息,据外媒报道,随着苹果首款头显产品Vision Pro在6月份正式推出,AR/VR/MR等头显产品也就将成为各大公司下一个重要的竞争领域,对显示屏这一关
Top