U ovom uputstvu naučit ćemo o klasi Java HashSet. Uz pomoć primjera naučit ćemo različite metode i operacije raspršivanja.
HashSet
Klasa okviru Java Zbirke pruža funkcionalnosti strukture hash tablice podataka.
Provodi sučelje Set.
Stvaranje HashSet-a
Da bismo stvorili hash set, prvo moramo uvesti java.util.HashSet
paket.
Nakon što uvozimo paket, evo kako možemo stvoriti hash skupove u Javi.
// HashSet with 8 capacity and 0.75 load factor HashSet numbers = new HashSet(8, 0.75);
Ovdje smo stvorili skup raspršivanja s imenom numbers
.
Obavijest, dio novi HashSet(8, 0.75)
. Ovdje je prvi parametar kapacitet , a drugi parametar loadFactor .
- kapacitet - Kapacitet ovog hash skupa je 8. Što znači da može pohraniti 8 elemenata.
- loadFactor - Faktor opterećenja ovog skupa raspršivanja je 0,6. To znači da, kad god se naš hash set popuni za 60%, elementi se premještaju u novu hash tablicu dvostruke veličine izvorne hash tablice.
Zadani kapacitet i faktor opterećenja
Moguće je stvoriti tablicu raspršivanja bez definiranja njezinog kapaciteta i faktora opterećenja. Na primjer,
// HashSet with default capacity and load factor HashSet numbers1 = new HashSet();
Prema zadanim postavkama,
- kapacitet hash skupa bit će 16
- faktor opterećenja iznosit će 0,75
Metode HashSet-a
HashSet
Klasa pruža različite metode koje omogućuju nam da obavljaju različite operacije na setu.
Umetnite elemente u HashSet
add()
- ubacuje navedeni element u skupaddAll()
- u skup ubacuje sve elemente navedene zbirke
Na primjer,
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); ) )
Izlaz
HashSet: (2, 4, 6) Novi HashSet: (2, 4, 5, 6)
Pristupite elementima HashSet
Za pristup elementima hash skupa možemo koristiti iterator()
metodu. Da bismo koristili ovu metodu, moramo uvesti java.util.Iterator
paket. Na primjer,
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(", "); ) ) )
Izlaz
HashSet: (2, 5, 6) HashSet koristeći Iterator: 2, 5, 6,
Uklonite elemente
remove()
- uklanja navedeni element iz skuparemoveAll()
- uklanja sve elemente iz skupa
Na primjer,
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); ) )
Izlaz
HashSet: (2, 5, 6) Je li uklonjeno 5? true Jesu li uklonjeni svi elementi? pravi
Postavite operacije
Razne metode HashSet
klase također se mogu koristiti za izvođenje različitih skupnih operacija.
Unija setova
Da bismo izvršili uniju između dva skupa, možemo koristiti addAll()
metodu. Na primjer,
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); ) )
Izlaz
HashSet1: (2, 4) HashSet2: (1, 3) Unija je: (1, 2, 3, 4)
Sjecište skupova
Da bismo izveli presijecanje dvaju skupova, možemo koristiti retainAll()
metodu. Na primjer
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); ) )
Izlaz
HashSet1: (2, 3) HashSet2: (2, 4) Raskrižje je: (2)
Razlika skupova
Da bismo izračunali razliku između dva skupa, možemo koristiti removeAll()
metodu. Na primjer,
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); ) )
Izlaz
HashSet1: (2, 3, 5) HashSet2: (1, 3, 5) Razlika: (2)
Podskup
Da bismo provjerili je li skup podskup drugog skupa ili ne, možemo koristiti containsAll()
metodu. Na primjer,
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); ) )
Izlaz
HashSet1: (1, 2, 3, 4) HashSet2: (2, 3) Je li HashSet2 podskup HashSet1? pravi
Ostale metode HashSet-a
Metoda | Opis |
---|---|
clone() | Stvara kopiju HashSet |
contains() | Pretražuje HashSet navedeni element i vraća logički rezultat |
isEmpty() | Provjerava je li HashSet prazno |
size() | Vraća veličinu HashSet |
clear() | Uklanja sve elemente iz HashSet |
Da biste saznali više o metodama HashSet, posjetite Java HashSet (službena Java dokumentacija).
Zašto HashSet?
U Javi HashSet
se obično koristi ako elementima moramo pristupiti nasumično. To je zato što se elementima u hash tablici pristupa pomoću hash kodova.
Hashcode elementa jedinstveni je identitet koji pomaže identificirati element u hash tablici.
HashSet
ne može sadržavati dvostruke elemente. Stoga svaki element hash skupa ima jedinstveni hashcode.
Napomena: HashSet nije sinkroniziran. To jest ako više niti istovremeno pristupa hash skupu i jedna od niti modificira hash set. Tada se mora sinkronizirati izvana.