Closed fuzhengwei closed 2 years ago
https://bugstack.cn/interview/2020/08/04/%E9%9D%A2%E7%BB%8F%E6%89%8B%E5%86%8C-%E7%AC%AC2%E7%AF%87-%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84-HashCode%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BD%BF%E7%94%A831%E4%BD%9C%E4%B8%BA%E4%B9%98%E6%95%B0.html
Why does Java's hashCode() in String use 31 as a multiplier? 这是一个经典问题,也是对数据结构散列表学习的最佳方式。看过这篇文章之后你会彻底了解hashcode为什么使用31作为乘数,它到底发挥了怎样的作用。
33号格子为什么看起来没有那么"散列"
@lvgocc 33号格子为什么看起来没有那么"散列"
单词会有一些比较集中的,比如aaa1,aaa2,aaa3的高频词,只能在同样的词库下,相互比对。
读完打卡,虽然33跟31的散列效果相似,看数据甚至33的碰撞概率更低。但是在原数据左移5次之后,若再进行+i的操作,可能会引发数据溢出,所以选择-i,即乘数31。
https://bugstack.cn/interview/2020/08/04/%E9%9D%A2%E7%BB%8F%E6%89%8B%E5%86%8C-%E7%AC%AC2%E7%AF%87-%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84-HashCode%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BD%BF%E7%94%A831%E4%BD%9C%E4%B8%BA%E4%B9%98%E6%95%B0.html
Why does Java's hashCode() in String use 31 as a multiplier? 这是一个经典问题,也是对数据结构散列表学习的最佳方式。看过这篇文章之后你会彻底了解hashcode为什么使用31作为乘数,它到底发挥了怎样的作用。