In diesem Tutorial lernen wir anhand von Beispielen die Java LinkedHashSet-Klasse und ihre Methoden kennen.
Die LinkedHashSet
Klasse des Java-Sammlungsframeworks bietet Funktionen sowohl für die Hashtabelle als auch für die Datenstruktur der verknüpften Liste.
Es implementiert die Set-Schnittstelle.
Elemente von LinkedHashSet
werden in Hash-Tabellen ähnlich wie HashSet gespeichert.
Verknüpfte Hash-Sets führen jedoch intern eine doppelt verknüpfte Liste für alle ihre Elemente. Die verknüpfte Liste definiert die Reihenfolge, in der Elemente in Hash-Tabellen eingefügt werden.
Erstellen Sie ein LinkedHashSet
Um einen verknüpften Hash-Satz zu erstellen, müssen wir java.util.LinkedHashSet
zuerst das Paket importieren .
Sobald wir das Paket importiert haben, können wir hier verknüpfte Hash-Sets in Java erstellen.
// LinkedHashSet with 8 capacity and 0.75 load factor LinkedHashSet numbers = new LinkedHashSet(8, 0.75);
Hier haben wir einen verknüpften Hash-Satz mit dem Namen "Nummern" erstellt.
Beachten Sie, das Teil new LinkedHashSet(8, 0.75)
. Hier ist der erste Parameter die Kapazität und der zweite Parameter loadFactor .
- Kapazität - Die Kapazität dieses Hash-Sets beträgt 8. Das heißt, es können 8 Elemente gespeichert werden.
- loadFactor - Der Ladefaktor dieses Hash-Sets beträgt 0,6. Das heißt, wenn unsere Hash-Tabelle zu 60% gefüllt ist, werden die Elemente in eine neue Hash-Tabelle verschoben, die doppelt so groß ist wie die ursprüngliche Hash-Tabelle.
Standardkapazität und Lastfaktor
Es ist möglich, einen verknüpften Hash-Satz zu erstellen, ohne dessen Kapazität und Auslastungsfaktor zu definieren. Beispielsweise,
// LinkedHashSet with default capacity and load factor LinkedHashSet numbers1 = new LinkedHashSet();
Standardmäßig,
- Die Kapazität des verknüpften Hash-Sets beträgt 16
- Der Lastfaktor beträgt 0,75
LinkedHashSet aus anderen Sammlungen erstellen
So können wir ein verknüpftes Hash-Set erstellen, das alle Elemente anderer Sammlungen enthält.
import java.util.LinkedHashSet; import java.util.ArrayList; class Main ( public static void main(String() args) ( // Creating an arrayList of even numbers ArrayList evenNumbers = new ArrayList(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("ArrayList: " + evenNumbers); // Creating a LinkedHashSet from an ArrayList LinkedHashSet numbers = new LinkedHashSet(evenNumbers); System.out.println("LinkedHashSet: " + numbers); ) )
Ausgabe
ArrayList: (2, 4) LinkedHashSet: (2, 4)
Methoden von LinkedHashSet
Die LinkedHashSet
Klasse bietet Methoden, mit denen wir verschiedene Operationen für den verknüpften Hash-Satz ausführen können.
Elemente in LinkedHashSet einfügen
add()
- fügt das angegebene Element in den verknüpften Hash-Satz einaddAll()
- fügt alle Elemente der angegebenen Sammlung in den verknüpften Hash-Satz ein
Beispielsweise,
import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet evenNumber = new LinkedHashSet(); // Using add() method evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("LinkedHashSet: " + evenNumber); LinkedHashSet numbers = new LinkedHashSet(); // Using addAll() method numbers.addAll(evenNumber); numbers.add(5); System.out.println("New LinkedHashSet: " + numbers); ) )
Ausgabe
LinkedHashSet: (2, 4, 6) Neues LinkedHashSet: (2, 4, 6, 5)
Greifen Sie auf LinkedHashSet-Elemente zu
Um auf die Elemente eines verknüpften Hash-Sets zuzugreifen, können wir die iterator()
Methode verwenden. Um diese Methode verwenden zu können, müssen wir das java.util.Iterator
Paket importieren . Beispielsweise,
import java.util.LinkedHashSet; import java.util.Iterator; class Main ( public static void main(String() args) ( LinkedHashSet numbers = new LinkedHashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("LinkedHashSet: " + numbers); // Calling the iterator() method Iterator iterate = numbers.iterator(); System.out.print("LinkedHashSet using Iterator: "); // Accessing elements while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) )
Ausgabe
LinkedHashSet: (2, 5, 6) LinkedHashSet mit Iterator: 2, 5, 6,
Hinweis :
hasNext()
Gibt zurück,true
wenn das verknüpfte Hash-Set ein nächstes Element enthältnext()
Gibt das nächste Element im verknüpften Hash-Set zurück
Elemente aus HashSet entfernen
remove()
- Entfernt das angegebene Element aus dem verknüpften Hash-SetremoveAll()
- Entfernt alle Elemente aus dem verknüpften Hash-Set
Beispielsweise,
import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet numbers = new LinkedHashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("LinkedHashSet: " + numbers); // Using the remove() method 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) Wird 5 entfernt? true Werden alle Elemente entfernt? wahr
Operationen einstellen
Die verschiedenen Methoden der LinkedHashSet
Klasse können auch verwendet werden, um verschiedene Mengenoperationen auszuführen.
Vereinigung von Mengen
Zwei führen die Vereinigung zwischen zwei Mengen durch, wir können die addAll()
Methode verwenden. Beispielsweise,
import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet evenNumbers = new LinkedHashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("LinkedHashSet1: " + evenNumbers); LinkedHashSet numbers = new LinkedHashSet(); numbers.add(1); numbers.add(3); System.out.println("LinkedHashSet2: " + numbers); // Union of two set numbers.addAll(evenNumbers); System.out.println("Union is: " + numbers); ) )
Ausgabe
LinkedHashSet1: (2, 4) LinkedHashSet2: (1, 3) Union ist: (1, 3, 2, 4)
Schnittmenge von Mengen
To perform the intersection between two sets, we can use the retainAll()
method. For example
import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet primeNumbers = new LinkedHashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("LinkedHashSet1: " + primeNumbers); LinkedHashSet evenNumbers = new LinkedHashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("LinkedHashSet2: " + evenNumbers); // Intersection of two sets evenNumbers.retainAll(primeNumbers); System.out.println("Intersection is: " + evenNumbers); ) )
Output
LinkedHashSet1: (2, 3) LinkedHashSet2: (2, 4) Intersection is: (2)
Difference of Sets
To calculate the difference between the two sets, we can use the removeAll()
method. For example,
import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet primeNumbers = new LinkedHashSet(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("LinkedHashSet1: " + primeNumbers); LinkedHashSet oddNumbers = new LinkedHashSet(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("LinkedHashSet2: " + oddNumbers); // Difference between LinkedHashSet1 and LinkedHashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("Difference : " + primeNumbers); ) )
Output
LinkedHashSet1: (2, 3, 5) LinkedHashSet2: (1, 3, 5) Difference: (2)
Subset
To check if a set is a subset of another set or not, we can use the containsAll()
method. For example,
import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet numbers = new LinkedHashSet(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("LinkedHashSet1: " + numbers); LinkedHashSet primeNumbers = new LinkedHashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("LinkedHashSet2: " + primeNumbers); // Check if primeNumbers is a subset of numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("Is LinkedHashSet2 is subset of LinkedHashSet1? " + result); ) )
Output
LinkedHashSet1: (1, 2, 3, 4) LinkedHashSet2: (2, 3) Is LinkedHashSet2 is a subset of LinkedHashSet1? true
Other Methods Of LinkedHashSet
Method | Description |
---|---|
clone() | Creates a copy of the LinkedHashSet |
contains() | Searches the LinkedHashSet for the specified element and returns a boolean result |
isEmpty() | Checks if the LinkedHashSet is empty |
size() | Returns the size of the LinkedHashSet |
clear() | Removes all the elements from the LinkedHashSet |
To learn more about LinkedHashSet
methods, visit Java LinkedHashSet (official Java documentation).
LinkedHashSet Vs. HashSet
Both LinkedHashSet
and HashSet
implements the Set
interface. However, there exist some differences between them.
LinkedHashSet
maintains a linked list internally. Due to this, it maintains the insertion order of its elements.- The
LinkedHashSet
class requires more storage thanHashSet
. This is becauseLinkedHashSet
maintains linked lists internally. - The performance of
LinkedHashSet
is slower thanHashSet
. It is because of linked lists present inLinkedHashSet
.
LinkedHashSet Vs. TreeSet
Here are the major differences between LinkedHashSet
and TreeSet
:
- Die
TreeSet
Klasse implementiert dieSortedSet
Schnittstelle. Aus diesem Grund werden Elemente in einem Baumsatz sortiert. DieLinkedHashSet
Klasse behält jedoch nur die Einfügereihenfolge ihrer Elemente bei. - A
TreeSet
ist normalerweise langsamer als aLinkedHashSet
. Dies liegt daran, dass jedes Mal, wenn ein Element zu a hinzugefügtTreeSet
wird, die Sortieroperation ausgeführt werden muss. LinkedHashSet
ermöglicht das Einfügen von Nullwerten. Wir können jedoch keinen Nullwert in einfügenTreeSet
.