Karte Einführung
Kartieren Sie den Schlüssel zum Objekt des Wertes. Eine Karte kann keine doppelten Schlüssel enthalten. Jeder Schlüssel kann höchstens einem Wert zuordnen. Diese Schnittstelle ersetzt die Wörterbuchklasse, die vollständig eine abstrakte Klasse ist, keine Schnittstelle.
Die Kartenschnittstelle enthält drei Sammlungsansichten, mit denen der Inhalt einer Karte in Form eines Schlüsselsatzes, eines Wertsatzes oder eines Schlüsselwert-Zuordnungsbeziehungssatzes angezeigt wird. Die Zuordnungsreihenfolge ist definiert als die Reihenfolge, in der der Iterator seine Elemente in der Sammlungsansicht der Karte zurückgibt. Einige Mapping -Implementierungen garantieren ihre Bestellung explizit, wie die Treemap -Klasse; Andere garantieren ihre Bestellung nicht wie die Hashmap -Klasse.
HINWEIS: Bei der Verwendung veränderlicher Objekte als Zuordnungsschlüssel müssen zusätzliche Vorsicht geboten werden. Wenn ein Objekt ein Schlüssel in einer Karte ist, wird das Verhalten der Karte ungewiss sein, wenn der Wert des Objekts in einer Weise geändert wird, die den Gleichberechtigungsvergleich beeinflusst. Ein Sonderfall, der dies verbietet, ist, dass sich eine Karte nicht als Schlüssel einfügen lässt. Obwohl eine Karte sich selbst als Wert einbeziehen darf, seien Sie vorsichtig: Die Definition von Gleich- und Hashcode -Methoden ist auf solchen Karten nicht mehr explizit.
Kartenschnittstelle:
Die Karte bietet eine Zuordnung von Schlüssel zum Wert. Eine Karte kann nicht denselben Schlüssel enthalten, und jeder Schlüssel kann nur einen Wert zuordnen. Die Kartenschnittstelle bietet drei Arten von Ansichten der Sammlung. Der Inhalt der Karte kann als eine Reihe von Schlüsselsammlungen, eine Reihe von Wertungssammlungen oder eine Reihe von Schlüsselwertzuordnungen angesehen werden.
Hashtable -Klasse
Hashtable erbt die Kartenschnittstelle und implementiert eine Hash-Tabelle mit einem Schlüsselwert-Zuordnung. Jedes Nicht-Null-Objekt kann als Schlüssel oder Wert verwendet werden.
Verwenden Sie Put (Schlüssel, Wert), um Daten hinzuzufügen. Verwenden Sie GET (Schlüssel), um Daten abzurufen. Der Zeitaufwand dieser beiden grundlegenden Operationen ist konstant. Hashtable passt die Leistung durch die anfänglichen Kapazitäts- und Lastfaktorparameter an. Normalerweise kann der Standardlastfaktor 0,75 Zeit- und Raumausgleich besser erreichen. Das Erhöhen des Lastfaktors kann Platz sparen, aber die entsprechende Suchzeit erhöht sich, was sich auf die Operationen wie Get and Put auswirkt.
Ein einfaches Beispiel für die Verwendung eines Hashtabels ist wie folgt: Stellen Sie 1, 2 und 3 in einen Hashtable ein, und ihre Schlüssel sind "eins", "zwei", "drei":
Hashtable nummern = neuer Hashtable (); nummern.put ("eins", neue Ganzzahl (1)); nummern.put ("zwei", neue Integer (2)); nummern.put ("drei", neue Ganzzahl (3));Verwenden Sie den entsprechenden Schlüssel, um eine Nummer wie 2 herauszunehmen:
Ganzzahl n = (Integer) number.get ("zwei"); System.out.println ("Two =" + n);Da ein Objekt als Schlüssel die Position des entsprechenden Werts durch Berechnung seiner Hash -Funktion bestimmt, muss jedes Objekt als Schlüssel den HashCode und gleiche Methoden implementieren. Der HashCode und die Equals -Methoden erben aus dem Stammklassenobjekt. Wenn Sie eine benutzerdefinierte Klasse als Schlüssel verwenden, seien Sie sehr vorsichtig. Gemäß der Definition der Hash -Funktion, wenn die beiden Objekte gleich sind, dh obj1.equals (obj2) = wahr, muss ihr HashCode gleich sein, aber wenn die beiden Objekte unterschiedlich sind, sind ihre Hashcodes möglicherweise nicht unterschiedlich. Wenn die Hashcodes von zwei verschiedenen Objekten gleich sind, wird dieses Phänomen als Konflikt bezeichnet. Der Konflikt erhöht den Zeitaufwand für den Betrieb der Hash -Tabelle. Versuchen Sie daher, die Methode von HashCode () zu definieren, um den Betrieb der Hash -Tabelle zu beschleunigen.
Wenn dasselbe Objekt unterschiedliche Hashcodes hat, hat der Betrieb in der Hash -Tabelle unerwartete Ergebnisse (die erwartete GET -Methode gibt NULL zurück). Um dieses Problem zu vermeiden, müssen Sie sich nur an eine Sache erinnern: Sie sollten die Equals -Methode und die Hashcode -Methode gleichzeitig neu schreiben, anstatt nur eine davon zu schreiben.
Hashtable wird synchronisiert.
Hashmap -Klasse
HashMap ist ähnlich wie Hashtable. Der Unterschied besteht darin, dass Hashmap asynchron ist und Null zulässt, d. H. Nullwert und Nullschlüssel. Aber wenn HashMap als Sammlung angesehen wird (die VALUTE () -Methode kann eine Sammlung zurückgeben), ist die iterative Unteroperationszeit proportional zur Kapazität von HashMap. Wenn die Leistung von Iterationsoperationen sehr wichtig ist, setzen Sie die Initialisierungskapazität von HashMap nicht auf zu hoch oder der Lastfaktor ist zu niedrig.
WeaChashMap -Klasse
WeaphasMap ist eine verbesserte Hashmap, die "schwache Referenz" auf den Schlüssel implementiert. Wenn auf extern nicht mehr ein Schlüssel verwiesen wird, kann der Schlüssel von GC recycelt werden.
Das obige ist eine Einführung in die Java -Kartenschnittstelle. Schüler, die Java -Programmierung lernen, können sich darauf beziehen.