Java LinkedHashSet

W tym samouczku dowiemy się o klasie Java LinkedHashSet i jej metodach na przykładach.

LinkedHashSetKlasa zbiorów ramach Java zapewnia funkcjonalność zarówno hashtable i połączonej strukturze lista danych.

Implementuje interfejs Set.

Elementy LinkedHashSetsą przechowywane w tablicach skrótów podobnych do HashSet.

Jednak połączone zestawy skrótów przechowują wewnętrznie podwójnie połączoną listę dla wszystkich swoich elementów. Połączona lista definiuje kolejność, w jakiej elementy są wstawiane do tabel skrótów.

Utwórz LinkedHashSet

Aby utworzyć połączony zestaw skrótów, musimy najpierw zaimportować java.util.LinkedHashSetpakiet.

Po zaimportowaniu pakietu, oto jak możemy tworzyć połączone zestawy skrótów w Javie.

 // LinkedHashSet with 8 capacity and 0.75 load factor LinkedHashSet numbers = new LinkedHashSet(8, 0.75); 

Tutaj utworzyliśmy połączony zestaw skrótów o nazwie liczby.

Zwróć uwagę, część new LinkedHashSet(8, 0.75). Tutaj pierwszy parametr to pojemność, a drugi parametr to loadFactor .

  • pojemność - pojemność tego zestawu skrótu wynosi 8. Oznacza to, że może przechowywać 8 elementów.
  • loadFactor - Współczynnik obciążenia tego zestawu skrótów wynosi 0,6. Oznacza to, że za każdym razem, gdy nasza tabela skrótów jest wypełniona w 60%, elementy są przenoszone do nowej tabeli skrótów o rozmiarze dwukrotnie większym niż oryginalna tabela skrótów.

Domyślna pojemność i współczynnik obciążenia

Możliwe jest utworzenie połączonego zestawu skrótów bez definiowania jego pojemności i współczynnika obciążenia. Na przykład,

 // LinkedHashSet with default capacity and load factor LinkedHashSet numbers1 = new LinkedHashSet(); 

Domyślnie,

  • pojemność połączonego zestawu skrótów będzie wynosić 16
  • współczynnik obciążenia wyniesie 0,75

Tworzenie LinkedHashSet z innych kolekcji

Oto, jak możemy utworzyć połączony zestaw skrótów zawierający wszystkie elementy innych kolekcji.

 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); ) ) 

Wynik

 ArrayList: (2, 4) LinkedHashSet: (2, 4) 

Metody LinkedHashSet

LinkedHashSetKlasa udostępnia metody, które pozwalają nam na wykonywanie różnych operacji na połączonego zestawu hash.

Wstaw elementy do LinkedHashSet

  • add() - wstawia określony element do połączonego zestawu skrótów
  • addAll() - wstawia wszystkie elementy określonej kolekcji do połączonego zestawu skrótów

Na przykład,

 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); ) ) 

Wynik

 LinkedHashSet: (2, 4, 6) New LinkedHashSet: (2, 4, 6, 5) 

Uzyskaj dostęp do elementów LinkedHashSet

Aby uzyskać dostęp do elementów połączonego zestawu skrótów, możemy użyć iterator()metody. Aby skorzystać z tej metody, musimy zaimportować java.util.Iteratorpakiet. Na przykład,

 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(", "); ) ) ) 

Wynik

 LinkedHashSet: (2, 5, 6) LinkedHashSet przy użyciu Iteratora: 2, 5, 6, 

Uwaga :

  • hasNext()zwraca, truejeśli w połączonym zestawie skrótów jest następny element
  • next() zwraca następny element w połączonym zestawie skrótów

Usuń elementy z HashSet

  • remove() - usuwa określony element z połączonego zestawu skrótów
  • removeAll() - usuwa wszystkie elementy z połączonego zestawu skrótów

Na przykład,

 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); ) ) 

Wynik

LinkedHashSet: (2, 5, 6) Czy 5 zostało usunięte? true Czy wszystkie elementy zostały usunięte? prawdziwe

Operacje na zbiorach

Różne metody tej LinkedHashSetklasy mogą być również używane do wykonywania różnych operacji na zbiorach.

Związek zbiorów

Dwa wykonują sumę między dwoma zestawami, możemy użyć addAll()metody. Na przykład,

 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); ) ) 

Wynik

 LinkedHashSet1: (2, 4) LinkedHashSet2: (1, 3) Union to: (1, 3, 2, 4) 

Przecięcie zbiorów

Aby wykonać przecięcie między dwoma zestawami, możemy użyć retainAll()metody. Na przykład

 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); ) ) 

Wynik

 LinkedHashSet1: (2, 3) LinkedHashSet2: (2, 4) Przecięcie to: (2) 

Różnica zestawów

Aby obliczyć różnicę między dwoma zestawami, możemy użyć removeAll()metody. Na przykład,

 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); ) ) 

Wynik

 LinkedHashSet1: (2, 3, 5) LinkedHashSet2: (1, 3, 5) Różnica: (2) 

Podzbiór

Aby sprawdzić, czy zestaw jest podzbiorem innego zestawu, czy nie, możemy użyć containsAll()metody. Na przykład,

 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); ) ) 

Wynik

LinkedHashSet1: (1, 2, 3, 4) LinkedHashSet2: (2, 3) Czy LinkedHashSet2 jest podzbiorem LinkedHashSet1? prawdziwe

Inne metody LinkedHashSet

metoda Opis
clone() Tworzy kopię pliku LinkedHashSet
contains() Wyszukuje LinkedHashSetokreślony element i zwraca wynik logiczny
isEmpty() Sprawdza, czy pole LinkedHashSetjest puste
size() Zwraca rozmiar LinkedHashSet
clear() Usuwa wszystkie elementy z 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:

  • TreeSetKlasa implementuje SortedSetinterfejs. Dlatego elementy w zestawie drzew są sortowane. Jednak LinkedHashSetklasa zachowuje tylko kolejność wstawiania swoich elementów.
  • A TreeSetjest zwykle wolniejszy niż a LinkedHashSet. Dzieje się tak, ponieważ ilekroć element jest dodawany do elementu TreeSet, musi wykonać operację sortowania.
  • LinkedHashSetumożliwia wstawianie wartości null. Nie możemy jednak wstawić wartości null do TreeSet.

Interesujące artykuły...