Sada Java HashSet

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

HashSetTří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.HashSetnejprve 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

HashSetTří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 sady
  • addAll() - 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.Iteratorbalíč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 sady
  • removeAll() - 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 HashSettří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á HashSetzadaný prvek a vrátí logický výsledek
isEmpty() Zkontroluje, zda HashSetje 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ě HashSetse 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.

HashSetnemůž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.

Zajímavé články...