Java LinkedHashSet

In diesem Tutorial lernen wir anhand von Beispielen die Java LinkedHashSet-Klasse und ihre Methoden kennen.

Die LinkedHashSetKlasse 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 LinkedHashSetwerden 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.LinkedHashSetzuerst 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 LinkedHashSetKlasse 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 ein
  • addAll() - 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.IteratorPaket 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, truewenn das verknüpfte Hash-Set ein nächstes Element enthält
  • next() 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-Set
  • removeAll() - 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 LinkedHashSetKlasse 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 than HashSet. This is because LinkedHashSet maintains linked lists internally.
  • The performance of LinkedHashSet is slower than HashSet. It is because of linked lists present in LinkedHashSet.

LinkedHashSet Vs. TreeSet

Here are the major differences between LinkedHashSet and TreeSet:

  • Die TreeSetKlasse implementiert die SortedSetSchnittstelle. Aus diesem Grund werden Elemente in einem Baumsatz sortiert. Die LinkedHashSetKlasse behält jedoch nur die Einfügereihenfolge ihrer Elemente bei.
  • A TreeSetist normalerweise langsamer als a LinkedHashSet. Dies liegt daran, dass jedes Mal, wenn ein Element zu a hinzugefügt TreeSetwird, die Sortieroperation ausgeführt werden muss.
  • LinkedHashSetermöglicht das Einfügen von Nullwerten. Wir können jedoch keinen Nullwert in einfügen TreeSet.

Interessante Beiträge...