1. Problem
1. Wie verwendet Hashset, Treeset HashCode () und Equal () Methoden
2. Wann und warum implementieren Objekte in Treemap und Treeset eine vergleichbare Schnittstelle?
2. Antwort:
1. Hashset wird über HashMap implementiert. Treeset wird durch Treemap implementiert, verwendet jedoch nur den Kartenschlüssel.
2. Der Schlüssel und die MAP -Menge haben ein gemeinsames Merkmal, das die Einzigartigkeit des Satzes ist. Treemap hat eine zusätzliche Bestellung.
3. Hashcode und Equal () werden für HashMap verwendet. Da es keine Notwendigkeit gibt, zu sortieren, müssen Sie nur auf Positionierung und Einzigartigkeit achten.
A.HashCode wird verwendet, um den Hash -Wert zu berechnen, und der Hash -Wert wird verwendet, um den Hash -Tabellenindex zu bestimmen.
B. Ein Index in der Hash -Tabelle speichert eine verknüpfte Liste, sodass Sie die gleiche Methode durchlaufen müssen, um jedes Objekt in der Kette zu vergleichen, bevor Sie den dem Schlüsselwert entsprechenden Eintrag wirklich finden können.
Wenn C.put, wenn sich die Hash -Tabelle nicht befindet, fügen Sie vor der verlinkten Liste einen Eintrag hinzu. Wenn es sich befindet, ersetzen Sie den Wert im Eintrag und geben Sie den alten Wert zurück.
D. Achten Sie beim Überschreiben des HashCode () und Equal () des Schlüssels darauf, sie nicht mit veränderlichen Eigenschaften zu verbinden. Andernfalls ändert sich der HashCode nach Änderungen der Eigenschaft und gleich wird auch falsch, so dass er nicht in der Karte gefunden wird. Darüber hinaus kann ein solches Objekt nicht freigegeben werden, da es nicht gefunden werden kann, was zu einer ungültigen Referenz wird (entspricht einem Speicherleck).
4. Da Treemap sortiert werden muss, wird ein Komparator benötigt, um die Größe des Schlüsselwerts zu vergleichen. Natürlich wird es auch mit dem Komparator positioniert.
A. Comparator kann beim Erstellen von Treemap angegeben werden und verwenden Sie dann vergleicher.comPare beim Sortieren
B. Wenn der Komparator während der Erstellung nicht angegeben wird, wird die Methode key.comPareto () verwendet, wodurch der Schlüssel zur Implementierung der vergleichbaren Schnittstelle erforderlich ist.
C. Treemap wird unter Verwendung der Baumdatenstruktur implementiert, sodass die Positionierung mit der Vergleichsschnittstelle abgeschlossen werden kann.
import Java.util.hashset; import Java.util.iterator; öffentliche Klasse WPSKlHashset {// Verwendung von Set in Java (doppelte Objekte sind nicht zulässig): öffentlich statische void main (String [] args) {Hashset Hashset = New Hashset (); String a = new ("a"); String ("B"); Hashset.Add (a); "Dieses Objekt existiert nicht": "Es existiert bereits"; System.out.println ("testen Sie, ob ein Objekt hinzugefügt werden kann"+cz); System.out.println (Hashset.isempty ()); // testen Sie, ob ein Objekt bereits in IT -System enthalten ist. while (ir.hasnext ()) {System.out.println (ir.Next ());} // testen Sie, ob ein Objekt System löschen kann. ir = Hashset.Iderator (); while (ir.hasnext ()) {System.out.println (ir.Next ());}}}/*** Durch dieses Programm können Sie auch die Störung der zugesetzten Elemente des Baumsatzes und der Reihenfolge der Ausgabe der Ausgabe testen. New Treeset (); Tree.add ("China"); Tree.add ("America"); Tree.add ("Japan"); Tree.add ("Chinese"); Iterator Iter = Tree.iterator (); while (iter.hasnext ()) {System.out.println (iter.next ());}}}Außerdem schalte ich einige andere Unterschiede ein (dank meines Andygulin -Freundes, der "Baidu weiß"):
1. Treeset wird von einem zwei Differenzbaum implementiert. Die Daten in Treeset werden automatisch sortiert und Nullwerte sind nicht zulässig.
2. Hashset wird durch eine Hash -Tabelle implementiert. Die Daten im Hashset sind nicht ordnungsgemäß. Sie können Null setzen, aber Sie können nur einen Null setzen. Die Werte in beiden können nicht wie die eindeutige Einschränkung in der Datenbank wiederholt werden.
3. Hashset verlangt, dass das platzierte Objekt die Methode von HashCode () implementieren muss. Das platzierte Objekt ist mit dem HashCode -Code gekennzeichnet, und das HashCode -Objekt mit demselben Inhalt hat denselben HashCode, sodass der platzierte Inhalt nicht wiederholt werden kann. Objekte derselben Klasse können jedoch in verschiedenen Fällen platziert werden.
Zusammenfassen
Der oben genannte ist der Inhalt dieses Artikels über den Unterschied zwischen den Nutzungsmethoden von Hashset und Treeset, und ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!