java - HashMap中对于indexFor(int h, int length)的疑惑
迷茫
迷茫 2017-05-17 09:59:13
0
1
707
 static int indexFor(int h, int length) {
        // assert Integer.bitCount(length) == 1 : "length must be a non-zero power of 2";
        return h & (length-1);
    }

HashMap中会对key的hash值与Entry[]数组大小进行再hash求取Entry数组的下标位置,我刚才调试时发现,2个不同key(hash值也不同),但经过indexFor得到的index下标是一样的,也就是说2个不同key值、不同hash值的数值串在一起形成了链表,我记得以前看别人写的文章,都是说hash值相同,但key值不同的2个值才会形成链表,但实际自己调试却发现不一样的结果,请大神们看看问题所在

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(1)
Ty80
Object (key) -> hashCode -> index

不同的Object可能有相同的hashCode(反过来一定不同,除非hashCodeequals定义错了);
不同的hashCode可能有相同的index(反过来一定不同),这时才会形成链表。

这里的hashCode可能跟你看到的某些文章的hash不是一个意思吧。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板