java – Zweifel an indexFor(int h, int length) in HashMap
迷茫
迷茫 2017-05-17 09:59:13
0
1
649
 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?

迷茫
迷茫

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

Antworte allen(1)
Ty80
Object (key) -> hashCode -> index

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

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

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!