论坛首页 Java企业应用论坛

深入理解HashMap

浏览 130374 次
该帖已经被评为精华帖
作者 正文
   发表时间:2009-12-04  
如果不取& length -1 而是 & length

初始容量给 2 ^ n - 1 应该是一样的吧

为什么说 & length -1 很特别的呢
0 请登录后投票
   发表时间:2009-12-04  
看来平时光知道应用还是不够地,要深入了解原理...
0 请登录后投票
   发表时间:2009-12-04  


,我一直被这个问题很上心,现在看到了,但是看晕了,
0 请登录后投票
   发表时间:2009-12-04  
http://www.ibm.com/developerworks/cn/java/j-lo-hash/?ca=drs-tp4608
0 请登录后投票
   发表时间:2009-12-04   最后修改:2009-12-04
sun128837 写道
http://www.ibm.com/developerworks/cn/java/j-lo-hash/?ca=drs-tp4608




看来这个链接的文章的作者还没有明白h&length-1和2的幂之间的巧妙关系,我估计楼上还没有看过楼主文章就来发链接了吧
  • 大小: 87.5 KB
0 请登录后投票
   发表时间:2009-12-05  
分析很在理,最主要的是要有一种专研思想
0 请登录后投票
   发表时间:2009-12-05  
火星来客 写道
sun128837 写道
http://www.ibm.com/developerworks/cn/java/j-lo-hash/?ca=drs-tp4608




看来这个链接的文章的作者还没有明白h&length-1和2的幂之间的巧妙关系,我估计楼上还没有看过楼主文章就来发链接了吧


文章的作者明白的非常彻底,h&length-1就是这个作用---低位不变,截掉高位!


0 请登录后投票
   发表时间:2009-12-05   最后修改:2009-12-05
luckaway 写道
火星来客 写道
sun128837 写道
http://www.ibm.com/developerworks/cn/java/j-lo-hash/?ca=drs-tp4608




看来这个链接的文章的作者还没有明白h&length-1和2的幂之间的巧妙关系,我估计楼上还没有看过楼主文章就来发链接了吧


文章的作者明白的非常彻底,h&length-1就是这个作用---低位不变,截掉高位!



你不能孤立的看待这个问题,h&length-1拿出来单独讲是片面而且没有意义的,要理解这个hash函数,必须要和2的幂还有
h ^= (h >>> 20) ^ (h >>> 12);
        return h ^ (h >>> 7) ^ (h >>> 4);
结合起来。

将这这三者结合起来才能真正理解hashmap中的这个hash函数。
15 请登录后投票
   发表时间:2009-12-06  
不过想想我们的“均摊”原理,就释然了
=========
怎么理解?
0 请登录后投票
   发表时间:2009-12-07  
分析的很细致,虽然也看过HashMap的代码,但是经常纠缠于细节,没能像楼主这样高屋建瓴
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics