W tym samouczku dowiemy się o klasie Java HashSet. Dowiemy się o różnych metodach i operacjach na zestawach skrótów na przykładach.
HashSet
Klasa ramach kolekcje Java zapewnia funkcjonalność struktury danych tabeli hash.
Implementuje interfejs Set.
Tworzenie HashSet
Aby utworzyć zestaw skrótów, musimy najpierw zaimportować java.util.HashSet
pakiet.
Po zaimportowaniu pakietu, oto jak możemy tworzyć zestawy skrótów w Javie.
// HashSet with 8 capacity and 0.75 load factor HashSet numbers = new HashSet(8, 0.75);
Tutaj stworzyliśmy zestaw skrótów o nazwie numbers
.
Zwróć uwagę, część nowa HashSet(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 nasz zestaw skrótów jest wypełniony 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 tablicy skrótów bez definiowania jej pojemności i współczynnika obciążenia. Na przykład,
// HashSet with default capacity and load factor HashSet numbers1 = new HashSet();
Domyślnie,
- pojemność zestawu hash będzie wynosić 16
- współczynnik obciążenia wyniesie 0,75
Metody HashSet
HashSet
Klasa udostępnia różne metody, które pozwalają nam na wykonywanie różnych operacji na planie.
Wstaw elementy do HashSet
add()
- wstawia określony element do zestawuaddAll()
- wstawia wszystkie elementy określonej kolekcji do zestawu
Na przykład,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet evenNumber = new HashSet(); // Using add() method evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("HashSet: " + evenNumber); HashSet numbers = new HashSet(); // Using addAll() method numbers.addAll(evenNumber); numbers.add(5); System.out.println("New HashSet: " + numbers); ) )
Wynik
HashSet: (2, 4, 6) New HashSet: (2, 4, 5, 6)
Uzyskaj dostęp do elementów HashSet
Aby uzyskać dostęp do elementów 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.HashSet; import java.util.Iterator; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Calling iterator() method Iterator iterate = numbers.iterator(); System.out.print("HashSet using Iterator: "); // Accessing elements while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) )
Wynik
HashSet: (2, 5, 6) HashSet przy użyciu Iteratora: 2, 5, 6,
Usuń elementy
remove()
- usuwa określony element z zestawuremoveAll()
- usuwa wszystkie elementy z zestawu
Na przykład,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Using 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
HashSet: (2, 5, 6) Czy 5 jest usuwane? true Czy wszystkie elementy zostały usunięte? prawdziwe
Operacje na zbiorach
Różne metody tej HashSet
klasy mogą być również używane do wykonywania różnych operacji na zbiorach.
Związek zbiorów
Aby wykonać sumę między dwoma zestawami, możemy użyć addAll()
metody. Na przykład,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet evenNumbers = new HashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet1: " + evenNumbers); HashSet numbers = new HashSet(); numbers.add(1); numbers.add(3); System.out.println("HashSet2: " + numbers); // Union of two set numbers.addAll(evenNumbers); System.out.println("Union is: " + numbers); ) )
Wynik
HashSet1: (2, 4) HashSet2: (1, 3) Union to: (1, 2, 3, 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.HashSet; class Main ( public static void main(String() args) ( HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet1: " + primeNumbers); HashSet evenNumbers = new HashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet2: " + evenNumbers); // Intersection of two sets evenNumbers.retainAll(primeNumbers); System.out.println("Intersection is: " + evenNumbers); ) )
Wynik
HashSet1: (2, 3) HashSet2: (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.HashSet; class Main ( public static void main(String() args) ( HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("HashSet1: " + primeNumbers); HashSet oddNumbers = new HashSet(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("HashSet2: " + oddNumbers); // Difference between HashSet1 and HashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("Difference : " + primeNumbers); ) )
Wynik
HashSet1: (2, 3, 5) HashSet2: (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.HashSet; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("HashSet1: " + numbers); HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet2: " + primeNumbers); // Check if primeNumbers is a subset of numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("Is HashSet2 is subset of HashSet1? " + result); ) )
Wynik
HashSet1: (1, 2, 3, 4) HashSet2: (2, 3) Czy HashSet2 jest podzbiorem HashSet1? prawdziwe
Inne metody HashSet
metoda | Opis |
---|---|
clone() | Tworzy kopię pliku HashSet |
contains() | Wyszukuje HashSet określony element i zwraca wynik logiczny |
isEmpty() | Sprawdza, czy pole HashSet jest puste |
size() | Zwraca rozmiar HashSet |
clear() | Usuwa wszystkie elementy z HashSet |
Aby dowiedzieć się więcej o metodach HashSet, odwiedź witrynę Java HashSet (oficjalna dokumentacja Java).
Dlaczego HashSet?
W Javie HashSet
jest powszechnie używany, jeśli mamy losowy dostęp do elementów. Dzieje się tak, ponieważ dostęp do elementów w tablicy skrótów odbywa się za pomocą kodów skrótów.
Kod skrótu elementu to unikalna tożsamość, która pomaga zidentyfikować element w tabeli skrótów.
HashSet
nie może zawierać zduplikowanych elementów. W związku z tym każdy element zestawu skrótu ma unikalny kod skrótu.
Uwaga: HashSet nie jest zsynchronizowany. Dzieje się tak, jeśli wiele wątków uzyskuje dostęp do zestawu skrótów w tym samym czasie, a jeden z wątków modyfikuje zestaw skrótów. Następnie musi zostać zsynchronizowany zewnętrznie.