V tomto tutoriále sa dozvieme niečo o triede Java HashSet. Dozvieme sa o rôznych metódach a operáciách hash setu pomocou príkladov.
HashSet
Trieda rámci Java zbierok poskytuje funkčnosť dátové štruktúry hash tabuľky.
Implementuje rozhranie Set.
Vytvorenie sady HashSet
Aby sme vytvorili hashovaciu sadu, musíme najskôr importovať java.util.HashSet
balík.
Po importovaní balíka tu môžeme vytvoriť hašovacie sady v Jave.
// HashSet with 8 capacity and 0.75 load factor HashSet numbers = new HashSet(8, 0.75);
Tu sme vytvorili hashovú množinu s názvom numbers
.
Všimnite si, časť nová HashSet(8, 0.75)
. Tu je prvým parametrom kapacita a druhým parametrom je loadFactor .
- kapacita - kapacita tejto hashovacej sady je 8. To znamená, že môže uložiť 8 prvkov.
- loadFactor - Faktor zaťaženia tejto sady hash je 0,6. To znamená, že kedykoľvek je naša hash množina naplnená o 60%, prvky sú presunuté do novej hash tabuľky s dvojnásobnou veľkosťou ako pôvodná hash tabuľka.
Predvolená kapacita a faktor zaťaženia
Je možné vytvoriť hashovaciu tabuľku bez definovania jej kapacity a koeficientu zaťaženia. Napríklad,
// HashSet with default capacity and load factor HashSet numbers1 = new HashSet();
Predvolene,
- kapacita hashovacej súpravy bude 16
- činiteľ zaťaženia bude 0,75
Metódy HashSet
HashSet
Trieda ponúka celý rad možností, ktoré nám umožnia vykonávať rôzne operácie na scéne.
Vložte prvky do sady HashSet
add()
- vloží zadaný prvok do množinyaddAll()
- vloží do sady všetky prvky určenej kolekcie
Naprí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ýkon
HashSet: (2, 4, 6) Nová HashSet: (2, 4, 5, 6)
Prístup k prvkom HashSet
Na prístup k prvkom množiny hash môžeme použiť iterator()
metódu. Aby sme mohli použiť túto metódu, musíme java.util.Iterator
balíček importovať . Naprí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ýkon
HashSet: (2, 5, 6) HashSet pomocou Iterátora: 2, 5, 6,
Odstrániť prvky
remove()
- odstráni zadaný prvok zo sadyremoveAll()
- odstráni všetky prvky zo súpravy
Naprí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ýkon
HashSet: (2, 5, 6) Je 5 odstránených? true Sú odstránené všetky prvky? pravda
Nastaviť operácie
Na HashSet
vykonanie rôznych množinových operácií je možné použiť aj rôzne metódy triedy.
Únia súprav
Na vykonanie spojenia medzi dvoma množinami môžeme použiť addAll()
metódu. Naprí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ýkon
HashSet1: (2, 4) HashSet2: (1, 3) Únia je: (1, 2, 3, 4)
Priesečník množín
Na vykonanie priesečníka medzi dvoma množinami môžeme použiť retainAll()
metódu. Naprí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ýkon
HashSet1: (2, 3) HashSet2: (2, 4) Priesečník je: (2)
Rozdiel skupín
Na výpočet rozdielu medzi týmito dvoma množinami môžeme použiť removeAll()
metódu. Naprí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ýkon
HashSet1: (2, 3, 5) HashSet2: (1, 3, 5) Rozdiel: (2)
Podmnožina
Pomocou containsAll()
metódy môžeme skontrolovať, či je množina podmnožinou inej množiny . Naprí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ýkon
HashSet1: (1, 2, 3, 4) HashSet2: (2, 3) Je HashSet2 podskupinou HashSet1? pravda
Ostatné metódy HashSet
Metóda | Popis |
---|---|
clone() | Vytvorí kópiu súboru HashSet |
contains() | Vyhľadá HashSet zadaný prvok a vráti boolovský výsledok |
isEmpty() | Skontroluje, či HashSet je prázdny |
size() | Vráti veľkosť súboru HashSet |
clear() | Odstráni všetky prvky z HashSet |
Ak sa chcete dozvedieť viac informácií o metódach HashSet, navštívte Java HashSet (oficiálna dokumentácia Java).
Prečo HashSet?
V Jave HashSet
sa bežne používa, ak musíme pristupovať k prvkom náhodne. Je to tak preto, lebo k prvkom v hashovacej tabuľke sa pristupuje pomocou hash kódov.
Hašovací kód prvku je jedinečná identita, ktorá pomáha identifikovať prvok v hašovacej tabuľke.
HashSet
nemôže obsahovať duplicitné prvky. Preto má každý prvok hash sady jedinečný hashcode.
Poznámka: HashSet nie je synchronizovaný. To znamená, že viac vlákien pristupuje k množine hash súčasne a jedno z vlákien túto sadu hashov upravuje. Potom musí byť externe synchronizovaný.