在写hashcode时为什么要使用一个31这样的数

孤好梦中杀人 2013-12-14 07:47:10
为什么在写hashcode时为什么要使用一个31这样的数,我用100,11,17是不是一样呢?有什么不一样的地方呢?
...全文
204 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
小绵羊 2013-12-19
  • 打赏
  • 举报
回复
According to Joshua Bloch's Effective Java (a book that can't be recommended enough, and which I bought thanks to continual mentions on stackoverflow): The value 31 was chosen because it is an odd prime. If it were even and the multiplication overflowed, information would be lost, as multiplication by 2 is equivalent to shifting. The advantage of using a prime is less clear, but it is traditional. A nice property of 31 is that the multiplication can be replaced by a shift and a subtraction for better performance: 31 * i == (i << 5) - i. Modern VMs do this sort of optimization automatically. 31是素数 31*N 可以变成 N<<5-N 且5bit
solomon5926 2013-12-18
  • 打赏
  • 举报
回复
引用 2 楼 cl61917380 的回复:
哪里看到的,贴来看下。
源代码里面有,好像是HashMap还是HashTable的,这个值应该是经验值,没有很明确的理论证明的
coooliang 2013-12-18
  • 打赏
  • 举报
回复
哪里看到的,贴来看下。
coolbamboo2008 2013-12-18
  • 打赏
  • 举报
回复
31好像是什么东西的一个最小约数。有道理的(好像是hash表用来区分不同的空间的),忘记了,一般也没人去关注这个的。楼主愿意写几都行。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧