java - HashMap中對(duì)于indexFor(int h, int length)的疑惑
問(wèn)題描述
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中會(huì)對(duì)key的hash值與Entry[]數(shù)組大小進(jìn)行再hash求取Entry數(shù)組的下標(biāo)位置,我剛才調(diào)試時(shí)發(fā)現(xiàn),2個(gè)不同key(hash值也不同),但經(jīng)過(guò)indexFor得到的index下標(biāo)是一樣的,也就是說(shuō)2個(gè)不同key值、不同hash值的數(shù)值串在一起形成了鏈表,我記得以前看別人寫(xiě)的文章,都是說(shuō)hash值相同,但key值不同的2個(gè)值才會(huì)形成鏈表,但實(shí)際自己調(diào)試卻發(fā)現(xiàn)不一樣的結(jié)果,請(qǐng)大神們看看問(wèn)題所在
問(wèn)題解答
回答1:Object (key) -> hashCode -> index
不同的Object可能有相同的hashCode(反過(guò)來(lái)一定不同,除非hashCode或equals定義錯(cuò)了);不同的hashCode可能有相同的index(反過(guò)來(lái)一定不同),這時(shí)才會(huì)形成鏈表。
這里的hashCode可能跟你看到的某些文章的hash不是一個(gè)意思吧。
![css3 - [CSS] 動(dòng)畫(huà)效果 3D翻轉(zhuǎn)bug](http://www.aoyou183.cn/attached/image/news/202304/110831f073.png)