Die Klasse
HashSet
HashSet
HashSet
1. Die Werte in HashSet
2. Die Kapazität von HashSet
Konstruktor:
HashSet() Der Standard-Gleichheitskomparator erstellt eine leere neue Instanz.
HashSet(IEnumerable
HashSet(IEqualityComparer
HashSet(IEnumerable
Da HashSet
Im Folgenden finden Sie eine Einführung in einige seiner gängigen Methoden
Beschreibung des Mitgliedstyps
Methode hinzufügen fügt das angegebene Element zur Sammlung hinzu
Clear-Methode löscht Die Sammlung Alle Elemente in
Contains Methode bestimmt, ob ein Element in HashSet ist
Exists Methode bestimmt, ob HashSet
ExceptWith-Methode Entfernt alle Elemente in der angegebenen Sammlung aus dem aktuellen HashSet
IntersectWith-Methode ändert das aktuelle HashSet
IsProperSubsetOf Methode bestimmt, ob das HashSet
IsProperSupersetOf-Methode bestimmt, ob das HashSet
IsSunsetOf Methode bestimmt ob HashSet
IsSupersetOf Die Methode bestimmt, ob das HashSet
Remove Die Methode entfernt das angegebene Element aus dem HashSet
RemoveWhere Die Methode entfernt alle Elemente aus der HashSet
SetEquals Die Methode bestimmt, ob das HashSet
SynmmetricExceptWith -Methode ändert das aktuelle HashSet
TrimExcess -Methode legt die Kapazität des fest HashSet
UnionWith -Methode ändert das aktuelle HashSet
TreeSet
TreeSet wird mithilfe von TreeMap implementiert.
TreeSet ist eine geordnete Menge. Die Elemente in TreeSet werden in aufsteigender Reihenfolge angeordnet. Dies bedeutet, dass die Elemente in TreeSet die Comparable-Schnittstelle implementieren müssen. Oder haben Sie einen benutzerdefinierten Komparator.
Wir können beim Erstellen des TreeSet-Objekts das Komparatorobjekt übergeben, das die Comparator-Schnittstelle implementiert.
Der Unterschied zwischen TreeSet und HashSet
1. HashSet wird über HashMap implementiert, TreeSet wird über TreeMap implementiert, aber Set verwendet nur den Map-Schlüssel
2. Kartenschlüssel und Sets haben ein gemeinsames Merkmal, nämlich die Einzigartigkeit des Sets.
3. hashCode und equal() werden von HashMap verwendet Zum Sortieren müssen Sie sich nur auf Positionierung und Einzigartigkeit konzentrieren.
a. hashCode wird zur Berechnung von Hash-Werten und Hash-Werte zur Bestimmung von Hash-Tabellenindizes verwendet.
b. Ein Index in der Hash-Tabelle speichert eine verknüpfte Liste, daher ist es notwendig, die Equal-Methode zu durchlaufen, um jedes Objekt in der Kette wirklich zu lokalisieren, um den Eintrag zu finden, der dem Schlüsselwert entspricht. Wenn es sich nicht in der Hash-Tabelle befindet, fügen Sie einen Eintrag vor der verknüpften Liste hinzu. Wenn er gefunden wird, ersetzen Sie den Wert im Eintrag und geben Sie den alten Wert zurück
4 , Der Schlüsselwert wird in der Größe verglichen. Natürlich kann er auch mit Comparator
b angegeben werden Beim Erstellen wird die Methode key.compareTo( verwendet), die erfordert, dass der Schlüssel die Comparable-Schnittstelle implementiert.
c Schnittstelle vergleichen.
HashTable
Hashtables (Hash-Tabellen) sind kein neues Konzept im Computerbereich. Sie wurden entwickelt, um die Computerverarbeitung zu beschleunigen, die nach heutigen Maßstäben sehr langsam ist, und ermöglichen es Ihnen, bei der Abfrage vieler Dateneinträge schnell einen bestimmten Eintrag zu finden. Obwohl moderne Maschinen tausende Male schneller sind, sind Hashtabellen immer noch ein nützliches Werkzeug, um die beste Leistung aus Ihren Anwendungen herauszuholen.
Hashtable- und HashMap-Objekte ermöglichen es Ihnen, einen Schlüssel und einen Wert zu kombinieren und das Schlüssel/Wert-Paar mithilfe der put()-Methode in die Tabelle einzugeben. Anschließend können Sie den Wert abrufen, indem Sie die Methode get() aufrufen und den Schlüssel als Parameter übergeben. Schlüssel und Wert können beliebige Objekte sein, solange sie zwei Grundanforderungen erfüllen. Beachten Sie, dass primitive Typen mithilfe von Methoden wie Integer (int) in Objekte konvertiert werden müssen, da Schlüssel und Werte Objekte sein müssen.
Um ein Objekt einer bestimmten Klasse als Schlüssel zu verwenden, muss diese Klasse zwei Methoden bereitstellen, equal() und hashCode(). Diese beiden Methoden befinden sich in java.lang.Object, sodass alle Klassen diese beiden Methoden erben können. Die Implementierung dieser beiden Methoden in der Object-Klasse ist jedoch im Allgemeinen nutzlos, sodass Sie diese beiden Methoden normalerweise selbst überladen müssen.
Die Equals()-Methode vergleicht ihr Objekt mit einem anderen Objekt und gibt true zurück, wenn die beiden Objekte dieselben Informationen darstellen. Diese Methode stellt außerdem sicher, dass beide Objekte derselben Klasse angehören. Wenn es sich bei den beiden Referenzobjekten um identische Objekte handelt, gibt Object.equals() true zurück, weshalb diese Methode grundsätzlich nicht geeignet ist. In den meisten Fällen benötigen Sie eine Möglichkeit, Feld für Feld zu vergleichen. Daher betrachten wir verschiedene Objekte, die dieselben Daten darstellen, als gleich.
Die HashCode()-Methode generiert einen int-Wert, indem sie eine Hash-Funktion unter Verwendung des Inhalts des Objekts ausführt. Hashtable und HashMap verwenden diesen Wert, um herauszufinden, in welchem Bucket (oder welcher Liste) sich ein Schlüssel/Wert-Paar befindet. Hashtable-Leistung
Der Hauptfaktor, der die Effizienz von Hashtable beeinflusst, ist die durchschnittliche Länge der Liste in der Tabelle, da die durchschnittliche Suchzeit direkt mit dieser durchschnittlichen Länge zusammenhängt. Um die durchschnittliche Länge zu reduzieren, müssen Sie natürlich die Anzahl der Listen in der Hashtabelle erhöhen. Die beste Sucheffizienz erzielen Sie, wenn die Anzahl der Listen so groß ist, dass die meisten oder alle Listen nur einen Datensatz enthalten. Dies geht jedoch möglicherweise zu weit. Wenn Ihre Hashtabelle weitaus mehr Listen als Dateneinträge enthält, müssen Sie keinen solchen Speicheraufwand verursachen, und in manchen Fällen ist es für die Leute unmöglich, diesen Ansatz zu akzeptieren.
ashtable und HashMap
Die Klassen Hashtable und HashMap weisen drei wichtige Unterschiede auf. Der erste Unterschied ist hauptsächlich auf historische Gründe zurückzuführen. Hashtable basiert auf der alten Dictionary-Klasse und HashMap ist eine Implementierung der in Java 1.2 eingeführten Map-Schnittstelle.
Der vielleicht wichtigste Unterschied besteht darin, dass die Methoden von Hashtable synchron sind, die Methoden von HashMap hingegen nicht. Dies bedeutet, dass Sie, obwohl Sie eine Hashtable in einer Multithread-Anwendung verwenden können, ohne besondere Maßnahmen zu ergreifen, auch eine externe Synchronisierung für eine HashMap bereitstellen müssen. Eine praktische Methode ist die Verwendung der statischen synchronisiertMap()-Methode der Collections-Klasse, die ein threadsicheres Map-Objekt erstellt und es als gekapseltes Objekt zurückgibt. Mit den Methoden dieses Objekts können Sie synchron auf die zugrunde liegende HashMap zugreifen. Dies hat zur Folge, dass Sie die Synchronisierung in der Hashtable nicht unterbrechen können, wenn Sie sie nicht benötigen (z. B. in einer Single-Thread-Anwendung) und die Synchronisierung einen hohen Verarbeitungsaufwand verursacht.
Der dritte Unterschied besteht darin, dass Sie nur mit HashMap Nullwerte als Schlüssel oder Wert eines Tabelleneintrags verwenden können. Nur ein Datensatz in einer HashMap kann ein leerer Schlüssel sein, aber eine beliebige Anzahl von Einträgen kann ein leerer Wert sein. Dies bedeutet, dass get() null zurückgibt, wenn der Suchschlüssel nicht in der Tabelle gefunden wird oder wenn der Suchschlüssel gefunden wird, aber ein Nullwert ist. Verwenden Sie bei Bedarf die Methode „containKey()“, um zwischen diesen beiden Situationen zu unterscheiden.