java - HashMap中對於indexFor(int h, int length)的疑惑
迷茫
迷茫 2017-05-17 09:59:13
0
1
678
 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不是一個意思吧。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!