Die Hash -Tabelle ist auch als Verteilungsliste bekannt, eine Sammlungsklassenstruktur, die zum Speichern von Gruppenobjekten verwendet wird.
Was ist ein Hash -Tisch?
Sowohl Arrays als auch Vektoren können Objekte speichern, aber die Speicherposition des Objekts ist zufällig, dh keine notwendige Verbindung zwischen dem Objekt selbst und seiner Speicherposition. Wenn Sie ein Objekt finden möchten, können Sie nur mit jedem Element in einer bestimmten Reihenfolge (z. signifikant reduziert sein.
Eine effektive Speichermethode ist, dass sie nicht mit anderen Elementen verglichen wird und der Datensatz, der zu einem Zeitpunkt erhalten werden kann, erhalten werden kann. Dies erfordert eine spezifische Beziehung zwischen der Speicherposition des Objekts und dem Schlüsselattribut des Objekts (auf K), um jedem Objekt zu entsprechen, das einer eindeutigen Speicherposition entspricht. Berechnen Sie beim Suchen einfach den Wert von F (k) basierend auf den wichtigsten Attributen des zu überprüfenswerten Objekts. Wenn sich dieses Objekt in der Sammlung befindet, muss es sich in der Speicherposition f (k) befinden, sodass es nicht erforderlich ist, mit anderen Elementen im Satz zu vergleichen. Diese entsprechende Beziehung F als Hash -Methode genannt, und die gemäß dieser Idee festgelegte Tabelle ist eine Hash -Tabelle.
Java verwendet die Hash -Kategorie, um die Hash -Tabelle zu erreichen.
• Kapazität: Die Kapazität von Hashtable ist nicht festgelegt, und die Kapazität des Objekts kann auch automatisch erhöht werden.
• Schlüssel (Schlüssel): Jedes Speicherobjekt erfordert ein Schlüsselwort. Alle Schlüsselwörter in einem Hashtable sind einzigartig.
• Hash -Code: Wenn Sie das Objekt in Hashtable speichern möchten, müssen Sie den Schlüsselwortschlüssel auf einen Ganzzahl -Daten zuordnen, um der Hash -Code des Schlüssels zu werden.
• Element: Jedes Hashtable verfügt über zwei Domänen, die Schlüsselwort -Domänenschlüssel- und Wertdomänenwert (Speicherobjekt) sind. Sowohl der Schlüssel als auch der Wert können ein Objekttyp sein, aber es kann nicht leer sein.
• Lastfaktor: Der Füllfaktor wird durch die Fülle der Hash -Tabelle dargestellt, und sein Wert entspricht der Länge der Anzahl der Elemente als in der obigen Hash -Tabelle.
Hash -Tabelle Verwendung
Es gibt drei Hauptformen von Konstruktionsmethoden für Hash -Tabellen:
Hashtable (); // Der Standardkonstruktor ist 101, der maximale Füllfaktor 0,75
Hashtable (int -Kapazität);
Hashtable (int Kapazität, Float -Lastfaktor)
Die Hauptmethoden von Hash-Tabellen sind in Tabelle 8-6 gezeigt.
Tabelle 8-6 häufig durch Hash-Tabellendefinition definierte Methoden
Verfahren | Funktion |
---|---|
void clear () | RE -Set und Löschen Sie die Hash -Tabelle |
Boolesche enthält (Objektwert) | Stellen Sie fest, ob die Hash -Tabelle ein bestimmtes Objekt enthält, wenn es eine Rückgabe -True gibt, sonst wird der Falsch zurückgegeben |
Boolean enthälty (Objektschlüssel) | Stellen Sie fest, ob die Hash -Tabelle ein bestimmtes Schlüsselwort enthält, wenn es eine Rückkehr zu True gibt. Andernfalls wird der Falsch zurückgegeben |
boolean isempty () | Bestätigen Sie, ob die Hash -Tabelle leer ist, wenn Sie zu True zurückkehren. Andernfalls wird das Falsch zurückgegeben |
Objekt GET (Objektschlüssel) | Objekt, um die entsprechenden Schlüsselwörter zu erhalten, wenn keine Rückgabe -Null vorliegt |
void rehash () | Unabhängig davon, wie die Expansions -Hash -Tabelle mehr Elemente sparen kann, ruft das System diese Methode automatisch auf |
Objekt Put (Objektschlüssel, Objektwert) | Speichern Sie das Objekt in der Hash -Tabelle mit einem bestimmten Schlüsselwort. |
Objekt entfernen (Objekttaste) | Löschen Sie das Objekt, das der Schlüsselwortphase aus der Hash -Tabelle entspricht, wenn das Objekt nicht zu NULL zurückkehrt |
int size () | Zurück zur Größe des Hash -Tisches |
String toString () | Konvertieren Sie den Inhalt der Hash -Tabelle in eine Zeichenfolge |
Die Erstellung der Hash -Tabelle kann auch durch den neuen Bediener implementiert werden. Seine Aussage lautet:
Havetable hat = new Hashtable ();
Beispiel:
[Beispiel 8-12] Durchqueren von Hash-Tabellen.
//************** ******************************************************** ************************** Has.put ("eins", New Integer (1)); ", New Double (12.3)); set s = has.keyset (); für (iterator <string> i = s.Irator (); i.hasnext ();) {System.out.println (Has.get (Has.get ( I.Next ()));}}}
Run Ergebnisse:
21312.3