文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-11-29 23:38

关注

今天给大家介绍一个底层数字问题——为什么Java String哈希函数乘数为31?

1、源码重现

在这个实现中,31 被用作乘数。那么,为什么选择 31 作为乘数呢?

2、降低哈希冲突

31 是一个质数,相信大家学过数学的,质数是这样定义的:

指在大于1的自然数中,除了1和它本身以外没有任何正因数的自然数。

在哈希函数中,使用质数作为乘数可以提高哈希值的分布均匀性。如果使用非质数作为乘数,那么哈希值的分布可能会出现偏斜。

例如,如果使用 10 作为乘数,那么所有以 5 为尾数的字符串的哈希值将是相同的。这会导致哈希冲突的可能性增加。

3、提高哈希计算速度

在 Java 中,int 类型的变量占用 32 位。

31 是一个奇数,因此 31 * i 的结果可以只使用 31 位来表示。这意味着在计算哈希值时,可以使用位运算来代替乘法运算。

位运算比乘法运算要快得多。

因此,使用 31 作为乘数可以提高哈希计算速度。

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

在实际应用中,使用 31 作为乘数可以提供良好的哈希值分布和计算速度。当然,也可以使用其他质数作为乘数。例如,37 和 43 也是不错的选择。

但是,31 是一个相对较小的质数,因此它在计算速度方面具有优势。此外,31 也是一个常用的质数,因此在许多其他哈希函数中也得到了使用。

当然,31 并不是一个完美的乘数。在某些情况下,使用其他质数可能会更好。但是,对于大多数应用程序来说,31 都是一个不错的选择。

来源:Java技术指北内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯