„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Die wichtigsten Unterschiede zwischen HashSet und TreeSet in Java

Die wichtigsten Unterschiede zwischen HashSet und TreeSet in Java

Veröffentlicht am 05.11.2024
Durchsuche:341

Top Key Differences Between HashSet and TreeSet in Java

1. Übersicht über HashSet und TreeSet

Bevor wir uns mit den Unterschieden befassen, schauen wir uns kurz an, was HashSet und TreeSet sind.

1.1 Was ist HashSet?

Ein HashSet ist eine Sammlung, die eine Hash-Tabelle zur Speicherung verwendet. Es implementiert die Set-Schnittstelle, was bedeutet, dass es keine doppelten Elemente zulässt. Die Elemente sind ungeordnet und unsortiert, wodurch HashSet für Szenarien geeignet ist, in denen Sie schnell suchen, einfügen und löschen müssen.

1.2 Was ist TreeSet?

Ein TreeSet ist eine Sammlung, die die NavigableSet-Schnittstelle implementiert. Für die Speicherung wird ein Rot-Schwarz-Baum verwendet, was bedeutet, dass die Elemente sortiert und geordnet gespeichert werden. TreeSet lässt ebenfalls keine doppelten Elemente zu, ist jedoch ideal für Situationen, in denen Sie eine natürliche Reihenfolge der Elemente beibehalten müssen.

2. Hauptunterschiede zwischen HashSet und TreeSet

2.1 Bestellung

  • HashSet: Behält keine Reihenfolge der Elemente bei. Die Reihenfolge, in der Elemente hinzugefügt werden, korreliert nicht mit der Reihenfolge, in der sie gespeichert werden.
  • TreeSet: Ordnet die Elemente automatisch basierend auf ihrer natürlichen Reihenfolge oder einem angegebenen Komparator.

2.2 Leistung

  • HashSet: Bietet eine konstante Zeitkomplexität O(1) für grundlegende Operationen wie Hinzufügen, Entfernen und Enthält, wodurch es viel schneller geht, wenn die Reihenfolge keine Rolle spielt.
  • TreeSet: Bietet log(n)-Zeitkomplexität für Grundoperationen, da die Elemente in einer Baumstruktur gespeichert werden, was mehr Zeit in Anspruch nimmt als eine Hash-basierte Struktur.

2.3 Interner Speichermechanismus

HashSet : Verwendet intern eine Hash-Tabelle. Der Hash-Code jedes Elements wird verwendet, um seinen Speicherort zu bestimmen. Wenn zwei Elemente denselben Hash-Code haben, wird eine Technik namens Verkettung oder Sondierung verwendet, um Kollisionen zu behandeln.

Beispielcode:

Set hashSet = new HashSet();
hashSet.add("Apple");
hashSet.add("Banana");
hashSet.add("Mango");

TreeSet : Verwendet intern einen Rot-Schwarz-Baum. Jedes Element wird entsprechend seiner natürlichen Reihenfolge oder einem bereitgestellten Komparator platziert, um sicherzustellen, dass der Baum im Gleichgewicht bleibt.

Beispielcode:

Set treeSet = new TreeSet();
treeSet.add("Apple");
treeSet.add("Banana");
treeSet.add("Mango");

2.4 Nullelemente

  • HashSet: Erlaubt ein Nullelement, da es den Nullwert hashen kann.
  • TreeSet: Erlaubt keine Nullelemente, da Elemente verglichen werden müssen, um sie zu sortieren, und der Vergleich von Null mit einem beliebigen Objekt eine NullPointerException auslöst.

2.5 Synchronisierung

  • HashSet: Standardmäßig nicht synchronisiert, kann aber mit Collections.synchronizedSet synchronisiert werden.
  • TreeSet: Auch standardmäßig nicht synchronisiert, kann aber auf die gleiche Weise synchronisiert werden.

2.6 Doppelte Elemente

Sowohl HashSet als auch TreeSet erlauben keine doppelten Elemente. Die Methode zur Erkennung von Duplikaten unterscheidet sich jedoch. HashSet verwendet die Methoden hashCode () und equals (), während TreeSet die Methoden compareTo () oder einen Comparator[ verwendet &&&].

2.7 Speichernutzung

  • HashSet: Erfordert im Allgemeinen mehr Speicher aufgrund der zugrunde liegenden Hash-Tabelle und der Möglichkeit, dass verknüpfte Listen Kollisionen verarbeiten können.
  • TreeSet: Benötigt weniger Speicher, da es eine Baumstruktur verwendet, verursacht aber mehr Aufwand bei der Aufrechterhaltung der Reihenfolge.
2.8 Vergleich mit LinkedHashSet

HashSet vs. LinkedHashSet: Während HashSet keine Reihenfolge garantiert, behält LinkedHashSet die Einfügungsreihenfolge bei. TreeSet hingegen sortiert Elemente auf natürliche Weise oder durch einen benutzerdefinierten Komparator.

2.9 Anwendungsfälle

  • HashSet: Wird am besten verwendet, wenn der Fokus auf einer schnellen Zugriffszeit liegt und die Reihenfolge nicht wichtig ist.
  • TreeSet: Ideal für Szenarien, in denen auf Elemente in sortierter Reihenfolge zugegriffen werden muss.
2.10 Demo-Ergebnis: Iterationsreihenfolge

Das Ausführen der folgenden Codeausschnitte zeigt den Unterschied in der Iterationsreihenfolge:


// HashSet-Beispiel Set hashSet = new HashSet(); hashSet.add("Zebra"); hashSet.add("Apple"); hashSet.add("Mango"); System.out.println("HashSet: " hashSet); // Die Ausgabe kann ungeordnet sein, z. B. [Apple, Mango, Zebra] // TreeSet-Beispiel Set treeSet = new TreeSet(); treeSet.add("Zebra"); treeSet.add("Apple"); treeSet.add("Mango"); System.out.println("TreeSet: " treeSet); // Die Ausgabe wird sortiert, z. B. [Apple, Mango, Zebra]
// HashSet Example
Set hashSet = new HashSet();
hashSet.add("Zebra");
hashSet.add("Apple");
hashSet.add("Mango");
System.out.println("HashSet: "   hashSet); 
// Output may be unordered, e.g., [Apple, Mango, Zebra]

// TreeSet Example
Set treeSet = new TreeSet();
treeSet.add("Zebra");
treeSet.add("Apple");
treeSet.add("Mango");
System.out.println("TreeSet: "   treeSet); 
// Output will be sorted, e.g., [Apple, Mango, Zebra]
3. Fazit

Die Wahl zwischen HashSet und TreeSet hängt von Ihren spezifischen Anforderungen ab:

    Verwenden Sie
  • HashSet, wenn Sie einen Hochleistungssatz benötigen, ohne sich um die Reihenfolge der Elemente zu kümmern.
  • Verwenden Sie
  • TreeSet, wenn Sie Elemente auf natürliche Weise oder in einer benutzerdefinierten Reihenfolge sortieren möchten.
Haben Sie Fragen? Fühlen Sie sich frei, unten einen Kommentar zu hinterlassen!

Weitere Beiträge finden Sie unter: Die 10 wichtigsten Unterschiede zwischen HashSet und TreeSet in Java

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/anh_trntun_4732cf3d299/top-10-key-differences-between-hashset-and-treeset-in-java-49f3?1 Bei Verstößen wenden Sie sich bitte an Study_golang@163 .com, um es zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3