Šioje pamokoje sužinosime apie „Java HashSet“ klasę. Su pavyzdžių pagalba sužinosime apie įvairius maišos rinkinio metodus ir operacijas.
„ HashSet
Java 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.HashSet
paketą.
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
HashSet
Klasė 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.Iterator
paketą. 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š rinkinioremoveAll()
- 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 HashSet
klasė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 HashSet nurodyto elemento ir pateikia loginį rezultatą |
isEmpty() | Tikrina, ar HashSet tušč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“ HashSet
kalba 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.
HashSet
negali 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.