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 hasht den Hash-Wert des Schlüssels und die Größe des Entry[]-Arrays, um die tiefgestellte Position des Entry-Arrays zu erhalten. Ich habe gerade beim Debuggen herausgefunden, dass es zwei verschiedene Schlüssel (mit unterschiedlichen Hash-Werten) gibt, aber die Index erhalten durch indexFor Die Indizes sind gleich, was bedeutet, dass zwei Werte mit unterschiedlichen Schlüsselwerten und unterschiedlichen Hash-Werten aneinandergereiht werden, um eine verknüpfte Liste zu bilden. Ich erinnere mich, dass ich zuvor Artikel gelesen habe, die von anderen geschrieben wurden Ich habe gesagt, dass die Hash-Werte gleich sind, die Schlüsselwerte jedoch unterschiedlich sind. Beim tatsächlichen Debuggen habe ich jedoch unterschiedliche Ergebnisse gefunden. Kann sich bitte jemand das Problem ansehen?
不同的
Object
可能有相同的hashCode
(反过来一定不同,除非hashCode
或equals
定义错了);不同的
hashCode
可能有相同的index
(反过来一定不同),这时才会形成链表。这里的
hashCode
可能跟你看到的某些文章的hash
不是一个意思吧。