V tomto kurzu se dozvíme o třídě Java HashSet. Naučíme se o různých metodách a operacích hash setu pomocí příkladů.
HashSet
Třída rámci Java sbírek poskytuje funkčnost datové struktury hash tabulky.
Implementuje rozhraní Set.
Vytvoření sady HashSet
Aby bylo možné vytvořit sadu hash, musíme java.util.HashSet
nejprve importovat balíček.
Jakmile balíček naimportujeme, můžeme v jazyce Java vytvářet sady hash.
// HashSet with 8 capacity and 0.75 load factor HashSet numbers = new HashSet(8, 0.75);
Zde jsme vytvořili hashovou sadu s názvem numbers
.
Všimněte si, část nová HashSet(8, 0.75)
. Zde je prvním parametrem kapacita a druhým parametrem je loadFactor .
- kapacita - kapacita této hash sady je 8. To znamená, že může uložit 8 prvků.
- loadFactor - Faktor zatížení této hash sady je 0,6. To znamená, že kdykoli je naše hash sada naplněna o 60%, prvky jsou přesunuty do nové hash tabulky s dvojnásobnou velikostí původní hash tabulky.
Výchozí kapacita a faktor zatížení
Je možné vytvořit hashovací tabulku, aniž byste definovali její kapacitu a faktor zatížení. Například,
// HashSet with default capacity and load factor HashSet numbers1 = new HashSet();
Ve výchozím stavu,
- kapacita sady hash bude 16
- činitel zatížení bude 0,75
Metody HashSet
HashSet
Třída nabízí celou řadu možností, které nám umožní provádět různé operace na scéně.
Vložit prvky do sady HashSet
add()
- vloží zadaný prvek do sadyaddAll()
- vloží všechny prvky určené kolekce do sady
Například,
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); ) )
Výstup
HashSet: (2, 4, 6) Nová HashSet: (2, 4, 5, 6)
Přístup k prvkům HashSet
Pro přístup k prvkům hash sady můžeme použít iterator()
metodu. Aby bylo možné použít tuto metodu, musíme java.util.Iterator
balíček importovat . Například,
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(", "); ) ) )
Výstup
HashSet: (2, 5, 6) HashSet pomocí Iterátoru: 2, 5, 6,
Odebrat prvky
remove()
- odebere zadaný prvek ze sadyremoveAll()
- odebere všechny prvky ze sady
Například,
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); ) )
Výstup
HashSet: (2, 5, 6) Je 5 odstraněno? true Jsou všechny prvky odstraněny? skutečný
Nastavit operace
Různé metody HashSet
třídy lze také použít k provedení různých operací sady.
Unie sad
K provedení sjednocení mezi dvěma sadami můžeme použít addAll()
metodu. Například,
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); ) )
Výstup
HashSet1: (2, 4) HashSet2: (1, 3) Union je: (1, 2, 3, 4)
Průnik množin
K provedení průniku mezi dvěma množinami můžeme použít retainAll()
metodu. Například
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); ) )
Výstup
HashSet1: (2, 3) HashSet2: (2, 4) Křižovatka je: (2)
Rozdíl sad
K výpočtu rozdílu mezi těmito dvěma sadami můžeme použít removeAll()
metodu. Například,
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); ) )
Výstup
HashSet1: (2, 3, 5) HashSet2: (1, 3, 5) Rozdíl: (2)
Podmnožina
K ověření, zda je množina podmnožinou jiné množiny, můžeme použít containsAll()
metodu. Například,
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); ) )
Výstup
HashSet1: (1, 2, 3, 4) HashSet2: (2, 3) Je HashSet2 podmnožinou HashSet1? skutečný
Další metody HashSet
Metoda | Popis |
---|---|
clone() | Vytvoří kopii souboru HashSet |
contains() | Vyhledá HashSet zadaný prvek a vrátí logický výsledek |
isEmpty() | Zkontroluje, zda HashSet je prázdná |
size() | Vrátí velikost HashSet |
clear() | Odebere všechny prvky z HashSet |
Další informace o metodách HashSet najdete v Java HashSet (oficiální dokumentace Java).
Proč HashSet?
V Javě HashSet
se běžně používá, pokud musíme přistupovat k prvkům náhodně. Je to proto, že k prvkům v hash tabulce se přistupuje pomocí hash kódů.
Hashcode prvku je jedinečná identita, která pomáhá identifikovat prvek v hash tabulce.
HashSet
nemůže obsahovat duplicitní prvky. Proto má každý prvek sady hash jedinečný hashcode.
Poznámka: HashSet není synchronizován. To je, pokud více podprocesů přistupuje k sadě hash současně a jedno z podprocesů upravuje sadu hash. Pak to musí být externě synchronizováno.