Heim  >  Fragen und Antworten  >  Hauptteil

java – Zweifel an indexFor(int h, int length) in HashMap

 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?

迷茫迷茫2713 Tage vor659

Antworte allen(1)Ich werde antworten

  • PHP中文网

    PHP中文网2017-05-17 10:01:13

    Object (key) -> hashCode -> index
    

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

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

    Antwort
    0
  • StornierenAntwort