Java LinkedHashSet meistern: Funktionen, Methoden und praktische Beispiele
Java LinkedHashSet
In diesem Tutorial lernen wir die Java LinkedHashSet-Klasse und ihre Methoden anhand von Beispielen kennen.
Die LinkedHashSet-Klasse des Java Collections Frameworks bietet Funktionalitäten sowohl der Hashtable als auch der verketteten Liste Datenstruktur.
Sie implementiert das Set-Interface.

Elemente von LinkedHashSet werden in Hashtables ähnlich wie HashSet gespeichert.
Jedoch bewahren Linked Hash Sets intern eine doppelt verkettete Liste für alle ihre Elemente. Die verkettete Liste definiert die Reihenfolge, in der Elemente in Hashtables eingefügt werden.
LinkedHashSet erstellen
Um ein Linked Hash Set zu erstellen, müssen wir zuerst das java.util.LinkedHashSet-Paket importieren.
Nach dem Import können wir Linked Hash Sets in Java wie folgt erstellen.
// LinkedHashSet mit 8 Kapazität und 0.75 Load Factor LinkedHashSet<Integer> numbers = new LinkedHashSet<>(8, 0.75);
Hier haben wir ein Linked Hash Set namens numbers erstellt.
Beachten Sie den Teil new LinkedHashSet<>(8, 0.75). Hier ist der erste Parameter Kapazität und der zweite LoadFactor.
- Kapazität - Die Kapazität dieses Hash Sets ist 8. Bedeutet, es kann 8 Elemente speichern.
- LoadFactor - Der Load Factor dieses Hash Sets ist 0.6. Das bedeutet, wann immer unsere Hashtabelle zu 60% gefüllt ist, werden Elemente in eine neue Hashtabelle doppelter Größe verschoben.
Standardkapazität und Load Factor
Es ist möglich, ein Linked Hash Set ohne Definition von Kapazität und Load Factor zu erstellen. Zum Beispiel,
// LinkedHashSet mit Standardkapazität und Load Factor LinkedHashSet<Integer> numbers1 = new LinkedHashSet<>();
Standardmäßig:
- die Kapazität des Linked Hash Sets wird 16 sein
- der Load Factor wird 0.75 sein
LinkedHashSet aus anderen Collections erstellen
So erstellen wir ein Linked Hash Set, das alle Elemente anderer Collections enthält.
import java.util.LinkedHashSet; import java.util.ArrayList; class Main { public static void main(String[] args) { // ArrayList mit geraden Zahlen erstellen ArrayList<Integer> evenNumbers = new ArrayList<>(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("ArrayList: " + evenNumbers); // LinkedHashSet aus ArrayList erstellen LinkedHashSet<Integer> numbers = new LinkedHashSet<>(evenNumbers); System.out.println("LinkedHashSet: " + numbers); } }
Ausgabe
ArrayList: [2, 4] LinkedHashSet: [2, 4]
Methoden von LinkedHashSet
Die LinkedHashSet-Klasse stellt Methoden bereit, um verschiedene Operationen auf dem Linked Hash Set durchzuführen.
Elemente in LinkedHashSet einfügen
add()- fügt das angegebene Element zum Linked Hash Set hinzuaddAll()- fügt alle Elemente der angegebenen Collection zum Linked Hash Set hinzu
Zum Beispiel,
import java.util.LinkedHashSet; class Main { public static void main(String[] args) { LinkedHashSet<Integer> evenNumber = new LinkedHashSet<>(); // add() Methode verwenden evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("LinkedHashSet: " + evenNumber); LinkedHashSet<Integer> numbers = new LinkedHashSet<>(); // addAll() Methode verwenden numbers.addAll(evenNumber); numbers.add(5); System.out.println("New LinkedHashSet: " + numbers); } }
Ausgabe
LinkedHashSet: [2, 4, 6] New LinkedHashSet: [2, 4, 6, 5]
Auf LinkedHashSet-Elemente zugreifen
Um auf Elemente eines Linked Hash Sets zuzugreifen, können wir die iterator() Methode verwenden. Dazu müssen wir das java.util.Iterator Paket importieren. Zum Beispiel,
import java.util.LinkedHashSet; import java.util.Iterator; class Main { public static void main(String[] args) { LinkedHashSet<Integer> numbers = new LinkedHashSet<>(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("LinkedHashSet: " + numbers); // iterator() Methode aufrufen Iterator<Integer> iterate = numbers.iterator(); System.out.print("LinkedHashSet using Iterator: "); // Elemente zugreifen while(iterate.hasNext()) { System.out.print(iterate.next()); System.out.print(", "); } } }
Ausgabe
LinkedHashSet: [2, 5, 6] LinkedHashSet using Iterator: 2, 5, 6,
Hinweis:
hasNext()gibttruezurück falls nächstes Element im Linked Hash Set existiertnext()gibt das nächste Element im Linked Hash Set zurück
Elemente aus HashSet entfernen
remove()- entfernt das angegebene Element aus dem Linked Hash SetremoveAll()- entfernt alle Elemente aus dem Linked Hash Set
Zum Beispiel,
import java.util.LinkedHashSet; class Main { public static void main(String[] args) { LinkedHashSet<Integer> numbers = new LinkedHashSet<>(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("LinkedHashSet: " + numbers); // remove() Methode verwenden boolean value1 = numbers.remove(5); System.out.println("Is 5 removed? " + value1); boolean value2 = numbers.removeAll(numbers); System.out.println("Are all elements removed? " + value2); } }
Ausgabe
LinkedHashSet: [2, 5, 6] Is 5 removed? true Are all elements removed? true
Mengenoperationen
Die verschiedenen Methoden der LinkedHashSet-Klasse können auch für diverse Mengenoperationen genutzt werden.
Vereinigung von Sets
Für die Vereinigung zweier Sets nutzen wir die addAll() Methode. Zum Beispiel,
import java.util.LinkedHashSet; class Main { public static void main(String[] args) { LinkedHashSet<Integer> evenNumbers = new LinkedHashSet<>(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("LinkedHashSet1: " + evenNumbers); LinkedHashSet<Integer> numbers = new LinkedHashSet<>(); numbers.add(1); numbers.add(3); System.out.println("LinkedHashSet2: " + numbers); // Vereinigung zweier Sets numbers.addAll(evenNumbers); System.out.println("Union is: " + numbers); } }
Ausgabe
LinkedHashSet1: [2, 4] LinkedHashSet2: [1, 3] Union is: [1, 3, 2, 4]
Schnittmenge von Sets
Für die Schnittmenge zweier Sets nutzen wir die retainAll() Methode. Zum Beispiel
import java.util.LinkedHashSet; class Main { public static void main(String[] args) { LinkedHashSet<Integer> primeNumbers = new LinkedHashSet<>(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("LinkedHashSet1: " + primeNumbers); LinkedHashSet<Integer> evenNumbers = new LinkedHashSet<>(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("LinkedHashSet2: " + evenNumbers); // Schnittmenge zweier Sets evenNumbers.retainAll(primeNumbers); System.out.println("Intersection is: " + evenNumbers); } }
Ausgabe
LinkedHashSet1: [2, 3] LinkedHashSet2: [2, 4] Intersection is: [2]
Differenz von Sets
Um die Differenz zwischen zwei Sets zu berechnen, nutzen wir die removeAll() Methode. Zum Beispiel,
import java.util.LinkedHashSet; class Main { public static void main(String[] args) { LinkedHashSet<Integer> primeNumbers = new LinkedHashSet<>(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("LinkedHashSet1: " + primeNumbers); LinkedHashSet<Integer> oddNumbers = new LinkedHashSet<>(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("LinkedHashSet2: " + oddNumbers); // Differenz zwischen LinkedHashSet1 und LinkedHashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("Difference : " + primeNumbers); } }
Ausgabe
LinkedHashSet1: [2, 3, 5] LinkedHashSet2: [1, 3, 5] Difference: [2]
Teilmenge
Um zu prüfen, ob ein Set Teilmenge eines anderen ist, nutzen wir containsAll(). Zum Beispiel,
import java.util.LinkedHashSet; class Main { public static void main(String[] args) { LinkedHashSet<Integer> numbers = new LinkedHashSet<>(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("LinkedHashSet1: " + numbers); LinkedHashSet<Integer> primeNumbers = new LinkedHashSet<>(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("LinkedHashSet2: " + primeNumbers); // Prüfen ob primeNumbers Teilmenge von numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("Is LinkedHashSet2 is subset of LinkedHashSet1? " + result); } }
Ausgabe
LinkedHashSet1: [1, 2, 3, 4] LinkedHashSet2: [2, 3] Is LinkedHashSet2 is a subset of LinkedHashSet1? true
Weitere Methoden von LinkedHashSet
| Methode | Beschreibung |
|---|---|
clone() | Erstellt Kopie des LinkedHashSet |
contains() | Sucht LinkedHashSet nach angegebenem Element und gibt boolean zurück |
isEmpty() | Prüft ob LinkedHashSet leer ist |
size() | Gibt Größe des LinkedHashSet zurück |
clear() | Entfernt alle Elemente aus LinkedHashSet |
Um mehr über LinkedHashSet Methoden zu erfahren, besuchen Sie Java LinkedHashSet (offizielle Java Dokumentation).
LinkedHashSet vs. HashSet
Sowohl LinkedHashSet als auch HashSet implementieren das Set-Interface. Allerdings gibt es Unterschiede:
LinkedHashSetbewahrt intern eine verkettete Liste. Dadurch behält es die Einfügereihenfolge seiner Elemente bei.- Die
LinkedHashSet-Klasse benötigt mehr Speicher alsHashSet. Das liegt an den internen verketteten Listen. - Die Performance von
LinkedHashSetist langsamer alsHashSet. Wegen der verketteten Listen inLinkedHashSet.
LinkedHashSet vs. TreeSet
Hier sind die Hauptunterschiede zwischen LinkedHashSet und TreeSet:
- Die
TreeSet-Klasse implementiert dasSortedSet-Interface. Deshalb sind Elemente in einem Tree Set sortiert.LinkedHashSetbewahrt nur Einfügereihenfolge. - Ein
TreeSetist meist langsamer alsLinkedHashSet. Weil bei jedem Hinzufügen zuTreeSetSortierung durchgeführt werden muss. LinkedHashSeterlaubt Einfügen von null-Werten. Allerdings können wir keine null-Werte inTreeSeteinfügen.
Java
- Java Operatoren meistern: Typen, Syntax und praktische Beispiele
- Java Kommentare: Typen, Verwendung und Best Practices
- Java Enhanced For-Schleife meistern: Syntax, Beispiele und Best Practices
- Java Strings meistern: Erstellung, Methoden und Best Practices
- Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
- Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
- Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
- Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
- Java Assertions: Praktischer Leitfaden zur Fehlererkennung und Code-Reliabilität
- Java Vector verstehen: Verwendung, Funktionen und Vergleich mit ArrayList