Java HashSet

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.

HashSetKlasa 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.HashSetpakiet.

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

HashSetKlasa 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 zestawu
  • addAll() - 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.Iteratorpakiet. 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 zestawu
  • removeAll() - 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 HashSetklasy 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 HashSetokreślony element i zwraca wynik logiczny
isEmpty() Sprawdza, czy pole HashSetjest 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 HashSetjest 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.

HashSetnie 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.

Interesujące artykuły...