Sada Java HashSet

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.

HashSetTrieda 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.HashSetbalí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

HashSetTrieda 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žiny
  • addAll() - 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.Iteratorbalíč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 sady
  • removeAll() - 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 HashSetvykonanie 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á HashSetzadaný prvok a vráti boolovský výsledok
isEmpty() Skontroluje, či HashSetje 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 HashSetsa 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.

HashSetnemôž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ý.

Zaujímavé články...