Java HashSet

U ovom uputstvu naučit ćemo o klasi Java HashSet. Uz pomoć primjera naučit ćemo različite metode i operacije raspršivanja.

HashSetKlasa 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.HashSetpaket.

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

HashSetKlasa 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 skup
  • addAll() - 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.Iteratorpaket. 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 skupa
  • removeAll() - 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 HashSetklase 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 HashSetnavedeni element i vraća logički rezultat
isEmpty() Provjerava je li HashSetprazno
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 HashSetse 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.

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

Zanimljivi članci...