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 hachera la valeur de hachage de la clé et la taille du tableau Entry[] pour obtenir la position en indice du tableau Entry. Je viens de découvrir lors du débogage qu'il existe deux clés différentes (avec des valeurs de hachage différentes), mais la index obtenu via indexFor Les indices sont les mêmes, ce qui signifie que deux valeurs avec des valeurs de clé différentes et des valeurs de hachage différentes sont liées ensemble pour former une liste chaînée. Je me souviens avoir lu des articles écrits par d'autres auparavant, et ils ont tous lu. a dit que les valeurs de hachage sont les mêmes, mais que les valeurs clés sont différentes. Les valeurs formeront une liste chaînée, mais dans le débogage réel, j'ai trouvé des résultats différents. Quelqu'un peut-il jeter un œil au problème
.
Différents
Object
peuvent avoir le mêmehashCode
(qui à son tour doit être différent, à moins quehashCode
ouequals
ne soient définis incorrectement );Différents
hashCode
peuvent avoir le mêmeindex
(et à l'inverse doivent être différents), puis une liste chaînée sera formée.Object
可能有相同的hashCode
(反过来一定不同,除非hashCode
或equals
定义错了);不同的
hashCode
可能有相同的index
(反过来一定不同),这时才会形成链表。这里的
LehashCode
可能跟你看到的某些文章的hash
hashCode
ici peut ne pas avoir la même signification que lehash
dans certains articles que vous avez vus. 🎜