Warum muss die Kapazität ein Vielfaches oder 2 sein? Warum "&" im indexFür Funktionen verwenden? Warum den Hash in der Hash-Funktion neu berechnen, anstatt direkt den Hash-Code des Schlüssels zu verwenden?Über die Implementierung von Java HashMap
Ich denke, es gibt einige wichtige Unterschiede zwischen dieser Implementierung und der Beschreibung der "Einführung in den Algorithmus".
Was bedeutet ">>>"?
static int hash(int h) {
// This function ensures that hashCodes that differ only by
// constant multiples at each bit position have a bounded
// number of collisions (approximately 8 at default load factor).
h ^= (h >>> 20)^(h >>> 12);
return h^(h >>> 7)^(h >>> 4);
}
Kann mir jemand eine Anleitung geben? Ich schätze es, wenn jemand den Hash-Algorithmus erklären kann. Vielen Dank!
Ich weiß mit "&", der Schlüssel kann auf die begrenzten Steckplätze zugeordnet werden. Was ist mit Einfluss auf die Kollision in der Hash-Karte? – lingguang1997
'>>>' ist vorzeichenlose Rechtsverschiebung. Reguläres '>>' in Java behält und propagiert das Vorzeichenbit und lässt eine negative Zahl negativ. '>>>' füllt das Vorzeichenbit mit Nullen, wenn eine Verschiebung auftritt. –