锁定老帖子 主题:深入理解HashMap
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-03
文章写得不错,还有一个问题,hashcode的值在java中是怎么产生的?hashcode的值可以比length大吗?按照楼主的分析,为了使hashcode % length = hashcode &(length -1),而且有resize的75%的限制,是不是hashcode在实际中永远小于length?
|
|
返回顶楼 | |
发表时间:2009-12-04
kimmking 写道 这都精华了,
哎,我写了个介绍各种常见数据结构(ArrayList Hashmap/table。。。)的jdk实现和.net实现的原理分析的, 发到 算法和数据结构版本,被新手帖了。。。 哎,以后写啥都发java版。 精华的地方不是单纯的文章..是文字+MM |
|
返回顶楼 | |
发表时间:2009-12-04
kimmking 写道 这都精华了,
哎,我写了个介绍各种常见数据结构(ArrayList Hashmap/table。。。)的jdk实现和.net实现的原理分析的, 发到 算法和数据结构版本,被新手帖了。。。 哎,以后写啥都发java版。 人家MM,能够这样不错啦.... |
|
返回顶楼 | |
发表时间:2009-12-04
上个星期还在琢磨呢.
很仔细!! |
|
返回顶楼 | |
发表时间: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里也许就不一样,比较有特色,一般的数据结构里不会有这样的阐述,而且网上的文章中也没有这么深入的分析。故而得精华。 |
|
返回顶楼 | |
发表时间: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里也许就不一样,比较有特色,一般的数据结构里不会有这样的阐述,而且网上的文章中也没有这么深入的分析。故而得精华。
|
|
返回顶楼 | |
发表时间:2009-12-04
dennis_zane 写道
|
|
返回顶楼 | |
发表时间:2009-12-04
ahuaxuan 写道
dennis_zane 写道
呵呵,我是没有标注重点,将我关心的几个点列出来,有兴趣的自然会看,没兴趣就忽略呗。 |
|
返回顶楼 | |
发表时间:2009-12-04
很好的文章,但是哪位可以解释一下那段重新计算HashCode的位运算代码?
|
|
返回顶楼 | |
发表时间: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不同的话,不会影响效果吗? |
|
返回顶楼 | |