为什么 Java String 哈希乘数为 31?
資深大佬 : netty 77
Java String 类的哈希乘数选择 31,主要有以下几点考虑:
31 是奇素数。
哈希分布较为均匀。偶数的冲突率基本都很高,只有少数例外。较小的乘数,冲突率也比较高,如 1 至 20。
哈希计算速度快。可用移位和减法来代替乘法。现代的 VM 可以自动完成这种优化,如 31 * i = (i << 5) – i。
31 和 33 的计算速度和哈希分布基本一致,整体表现好,选择它们就很自然了。
https://mp.weixin.qq.com/s/sCWQGU_OWiQkDUuSPXvw-w
大佬有話說 (18)