HashCode 为什么使用 31 作为乘数?

| 阅读:1067 发表时间:2022-04-13 17:31:16 Java

1. 31 是一个奇质数,如果选择偶数会导致乘积运算时数据溢出。

2. 另外在二进制中,2 个 5 次方是 32,那么也就是 31 * i == (i << 5) - i。这主要是说乘积运算可以使用位移提升性能,同时目前的 JVM 虚拟机 

也会自动支持此类的优化。

3、散列实验,碰撞结果31,分布的更加均匀。


热门标签

热门推荐