论坛首页 Java企业应用论坛

深入理解HashMap

浏览 129561 次
该帖已经被评为精华帖
作者 正文
   发表时间:2009-12-03  
文章写得不错,还有一个问题,hashcode的值在java中是怎么产生的?hashcode的值可以比length大吗?按照楼主的分析,为了使hashcode % length = hashcode &(length -1),而且有resize的75%的限制,是不是hashcode在实际中永远小于length?
0 请登录后投票
   发表时间:2009-12-04  
kimmking 写道
这都精华了,
哎,我写了个介绍各种常见数据结构(ArrayList Hashmap/table。。。)的jdk实现和.net实现的原理分析的,
发到 算法和数据结构版本,被新手帖了。。。

哎,以后写啥都发java版。



精华的地方不是单纯的文章..是文字+MM
0 请登录后投票
   发表时间:2009-12-04  
kimmking 写道
这都精华了,
哎,我写了个介绍各种常见数据结构(ArrayList Hashmap/table。。。)的jdk实现和.net实现的原理分析的,
发到 算法和数据结构版本,被新手帖了。。。

哎,以后写啥都发java版。

人家MM,能够这样不错啦....
0 请登录后投票
   发表时间:2009-12-04  
上个星期还在琢磨呢.
很仔细!!
0 请登录后投票
   发表时间:2009-12-04   最后修改:2009-12-04
julyboxer 写道
kimmking 写道
这都精华了,
哎,我写了个介绍各种常见数据结构(ArrayList Hashmap/table。。。)的jdk实现和.net实现的原理分析的,
发到 算法和数据结构版本,被新手帖了。。。

哎,以后写啥都发java版。

人家MM,能够这样不错啦....

关键是看文章,而不是性别

kimmking的文章应该是这篇吧:
http://setting.iteye.com/blog/515605
http://setting.iteye.com/blog/521641
我先说说这两篇文章的问题所在,为什么要被别人投新手:

1.泛泛而谈,数据结构和算法最怕泛泛而谈,真正的价值就是在于细节,在这一点上这两篇文章恰恰是泛泛而谈(所以这两篇文章看上去就是名词解释而已)
2.基本是数据结构的常识,尤其是ArrayList的linkedList之流,是基础的不能再基础,如果要写这些东西,那么非得要写的非常详细,或者有特殊的见解才行,这一点这两篇文章没有做到,被一些人投入门也就是这个原因。

所以说要写数据结构的文章还是要有特点才行,没有特点只能沦为新手帖,因为书上到处都是。而mm的这篇文章特殊的地方就是在于hash算法的详细解释,这个算法在其他的hashmap里也许就不一样,比较有特色,一般的数据结构里不会有这样的阐述,而且网上的文章中也没有这么深入的分析。故而得精华。
0 请登录后投票
   发表时间:2009-12-04   最后修改:2009-12-04
火星来客 写道
julyboxer 写道
kimmking 写道
这都精华了,
哎,我写了个介绍各种常见数据结构(ArrayList Hashmap/table。。。)的jdk实现和.net实现的原理分析的,
发到 算法和数据结构版本,被新手帖了。。。

哎,以后写啥都发java版。

人家MM,能够这样不错啦....

关键是看文章,而不是性别

kimmking的文章应该是这篇吧:
http://setting.iteye.com/blog/515605
http://setting.iteye.com/blog/521641
我先说说这两篇文章的问题所在,为什么要被别人投新手:

1.泛泛而谈,数据结构和算法最怕泛泛而谈,真正的价值就是在于细节,在这一点上这两篇文章恰恰是泛泛而谈(所以这两篇文章看上去就是名词解释而已)
2.基本是数据结构的常识,尤其是ArrayList的linkedList之流,是基础的不能再基础,如果要写这些东西,那么非得要写的非常详细,或者有特殊的见解才行,这一点这两篇文章没有做到,被一些人投入门也就是这个原因。

所以说要写数据结构的文章还是要有特点才行,没有特点只能沦为新手帖,因为书上到处都是。而mm的这篇文章特殊的地方就是在于hash算法的详细解释,这个算法在其他的hashmap里也许就不一样,比较有特色,一般的数据结构里不会有这样的阐述,而且网上的文章中也没有这么深入的分析。故而得精华。



事实上,我较早的时候也提交过一篇分析文章,只不过没啥人注意罢了

http://www.iteye.com/topic/368087

 

0 请登录后投票
   发表时间:2009-12-04  
dennis_zane 写道



事实上,我较早的时候也提交过一篇分析文章,只不过没啥人注意罢了

http://www.iteye.com/topic/368087

 


恩,dennis的这篇文章已经描述到了hash算法的特点,不过重点没有突出啊,呵呵,所以说写文章是有技巧的。

0 请登录后投票
   发表时间:2009-12-04  
ahuaxuan 写道
dennis_zane 写道



事实上,我较早的时候也提交过一篇分析文章,只不过没啥人注意罢了

http://www.iteye.com/topic/368087

 


恩,dennis的这篇文章已经描述到了hash算法的特点,不过重点没有突出啊,呵呵,所以说写文章是有技巧的。

 

呵呵,我是没有标注重点,将我关心的几个点列出来,有兴趣的自然会看,没兴趣就忽略呗。

0 请登录后投票
   发表时间:2009-12-04  
很好的文章,但是哪位可以解释一下那段重新计算HashCode的位运算代码?
0 请登录后投票
   发表时间:2009-12-04  
grunt1223 写道
很好的文章,但是哪位可以解释一下那段重新计算HashCode的位运算代码?

同问。
 /**
     * Applies a supplemental hash function to a given hashCode, which
     * defends against poor quality hash functions.  This is critical
     * because HashMap uses power-of-two length hash tables, that
     * otherwise encounter collisions for hashCodes that do not differ
     * in lower bits. Note: Null keys always map to hash 0, thus index 0.
     */
    static int hash(int h) {
        // This function ensures that hashCodes that differ only by
        // constant multiples at each bit position have a bounded
        // number of collisions (approximately 8 at default load factor).
        h ^= (h >>> 20) ^ (h >>> 12);
        return h ^ (h >>> 7) ^ (h >>> 4);
    }

如何能保证运算后的HashCode与Length-1与之后,得到的值均匀分布呢?
Length不同的话,不会影响效果吗?
0 请登录后投票
论坛首页 Java企业应用版

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