W tym samouczku dowiemy się o klasie Java LinkedHashSet i jej metodach na przykładach.
LinkedHashSet
Klasa zbiorów ramach Java zapewnia funkcjonalność zarówno hashtable i połączonej strukturze lista danych.
Implementuje interfejs Set.
Elementy LinkedHashSet
są 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.LinkedHashSet
pakiet.
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
LinkedHashSet
Klasa 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ówaddAll()
- 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.Iterator
pakiet. 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,true
jeśli w połączonym zestawie skrótów jest następny elementnext()
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ówremoveAll()
- 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 LinkedHashSet
klasy 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 LinkedHashSet określony element i zwraca wynik logiczny |
isEmpty() | Sprawdza, czy pole LinkedHashSet jest 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 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
:
TreeSet
Klasa implementujeSortedSet
interfejs. Dlatego elementy w zestawie drzew są sortowane. JednakLinkedHashSet
klasa zachowuje tylko kolejność wstawiania swoich elementów.- A
TreeSet
jest zwykle wolniejszy niż aLinkedHashSet
. Dzieje się tak, ponieważ ilekroć element jest dodawany do elementuTreeSet
, musi wykonać operację sortowania. LinkedHashSet
umożliwia wstawianie wartości null. Nie możemy jednak wstawić wartości null doTreeSet
.