„Java HashSet“

Šioje pamokoje sužinosime apie „Java HashSet“ klasę. Su pavyzdžių pagalba sužinosime apie įvairius maišos rinkinio metodus ir operacijas.

HashSetJava Collections“ sistemos klasėje pateikiamos maišos lentelės duomenų struktūros funkcijos.

Jis įgyvendina sąsają „Nustatyti“.

„HashSet“ sukūrimas

Norėdami sukurti maišos rinkinį, pirmiausia turime importuoti java.util.HashSetpaketą.

Importavę paketą, galime sukurti „Java“ maišos rinkinius.

 // HashSet with 8 capacity and 0.75 load factor HashSet numbers = new HashSet(8, 0.75); 

Čia mes sukūrėme maišos rinkinį pavadinimu numbers.

Atkreipkite dėmesį, kad dalis yra nauja HashSet(8, 0.75). Čia pirmasis parametras yra talpa , o antrasis - „ loadFactor“ .

  • talpa - šio maišos rinkinio talpa yra 8. Tai reiškia, kad jame gali būti 8 elementai.
  • loadFactor - šio maišos rinkinio apkrovos koeficientas yra 0,6. Tai reiškia, kad kai mūsų maišos rinkinys užpildomas 60%, elementai perkeliami į naują maišos lentelę, kurios dydis yra dvigubai didesnis nei originalios maišos lentelės.

Numatytasis pajėgumas ir apkrovos koeficientas

Maišos lentelę galima sukurti neapibrėžiant jos talpos ir apkrovos koeficiento. Pavyzdžiui,

 // HashSet with default capacity and load factor HashSet numbers1 = new HashSet(); 

Pagal numatytuosius nustatymus

  • maišos rinkinio talpa bus 16
  • apkrovos koeficientas bus 0,75

„HashSet“ metodai

HashSetKlasė teikia įvairius metodus, kurie leidžia mums atlikti įvairius darbus, ant rinkinys.

Įterpkite elementus į „HashSet“

  • add() - įterpia nurodytą elementą į rinkinį
  • addAll() - į rinkinį įterpia visus nurodytos kolekcijos elementus

Pavyzdžiui,

 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); ) ) 

Rezultatas

 „HashSet“: (2, 4, 6) Naujas „HashSet“: (2, 4, 5, 6) 

Pasiekite „HashSet“ elementus

Norėdami pasiekti maišos rinkinio elementus, galime naudoti iterator()metodą. Norėdami naudoti šį metodą, turime importuoti java.util.Iteratorpaketą. Pavyzdžiui,

 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(", "); ) ) ) 

Rezultatas

 „HashSet“: (2, 5, 6) „HashSet“ naudojant „Iterator“: 2, 5, 6, 

Pašalinti elementus

  • remove() - pašalina nurodytą elementą iš rinkinio
  • removeAll() - pašalina visus elementus iš rinkinio

Pavyzdžiui,

 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); ) ) 

Rezultatas

„HashSet“: (2, 5, 6) Ar 5 pašalinami? tiesa Ar visi elementai pašalinami? tiesa

Nustatyti operacijas

Įvairūs HashSetklasės metodai taip pat gali būti naudojami atliekant įvairias rinkinio operacijas.

Rinkinių sąjunga

Norėdami atlikti dviejų rinkinių susivienijimą, galime naudoti addAll()metodą. Pavyzdžiui,

 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); ) ) 

Rezultatas

 HashSet1: (2, 4) HashSet2: (1, 3) Sąjunga yra: (1, 2, 3, 4) 

Rinkinių sankirta

Norėdami atlikti dviejų aibių susikirtimą, galime naudoti retainAll()metodą. Pavyzdžiui

 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); ) ) 

Rezultatas

 HashSet1: (2, 3) HashSet2: (2, 4) Sankryža yra: (2) 

Rinkinių skirtumas

Norėdami apskaičiuoti dviejų rinkinių skirtumą, galime naudoti removeAll()metodą. Pavyzdžiui,

 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); ) ) 

Rezultatas

 HashSet1: (2, 3, 5) HashSet2: (1, 3, 5) Skirtumas: (2) 

Pogrupis

Norėdami patikrinti, ar rinkinys yra kito rinkinio pogrupis, ar ne, galime naudoti containsAll()metodą. Pavyzdžiui,

 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); ) ) 

Rezultatas

HashSet1: (1, 2, 3, 4) HashSet2: (2, 3) Ar HashSet2 yra HashSet1 pogrupis? tiesa

Kiti „HashSet“ metodai

Metodas apibūdinimas
clone() Sukuria. Kopiją HashSet
contains() Ieško HashSetnurodyto elemento ir pateikia loginį rezultatą
isEmpty() Tikrina, ar HashSettuščia
size() Grąžina HashSet
clear() Pašalina visus elementus iš HashSet

Norėdami sužinoti daugiau apie „HashSet“ metodus, apsilankykite „Java HashSet“ (oficiali „Java“ dokumentacija).

Kodėl „HashSet“?

„Java“ HashSetkalba dažniausiai naudojama, jei turime prieigą prie elementų atsitiktinai. Taip yra todėl, kad maišos lentelės elementai pasiekiami naudojant maišos kodus.

Elemento maišos kodas yra unikali tapatybė, padedanti nustatyti elementą maišos lentelėje.

HashSetnegali būti pasikartojančių elementų. Taigi kiekvienas maišos rinkinio elementas turi unikalų maišos kodą.

Pastaba: „ HashSet“ nėra sinchronizuojamas. Tai yra, jei kelios gijos vienu metu pasiekia maišos rinkinį ir viena iš gijų modifikuoja maišos rinkinį. Tada jis turi būti išoriškai sinchronizuotas.

Įdomios straipsniai...