V tej vadnici bomo spoznali razred Java HashSet. S pomočjo primerov bomo spoznali različne metode in operacije razprševanja.
HashSet
Razred okvira Java Collections zagotavlja funkcionalnosti podatkovne strukture hash tabele.
Izvaja vmesnik Set.
Ustvarjanje sklopa HashSet
Če želite ustvariti nabor zgoščenih datotek, moramo najprej uvoziti java.util.HashSet
paket.
Ko uvozimo paket, tukaj je opisano, kako lahko v Javi ustvarimo razpršene sklope.
// HashSet with 8 capacity and 0.75 load factor HashSet numbers = new HashSet(8, 0.75);
Tu smo ustvarili hash set z imenom numbers
.
Obvestilo, del nov HashSet(8, 0.75)
. Tu je prvi parameter zmogljivost , drugi pa loadFactor .
- zmogljivost - Zmogljivost tega razpršenega nabora je 8. Pomen, lahko vsebuje 8 elementov.
- loadFactor - Faktor obremenitve tega razpršenega nabora je 0,6. To pomeni, da se elementi, kadar je naš nabor zgoščenk zapolnjen za 60%, premaknejo v novo razpredelnico z dvojno velikostjo prvotne razpršilne tabele.
Privzeta zmogljivost in faktor obremenitve
Razpršilno tabelo je mogoče ustvariti, ne da bi opredelili njeno zmogljivost in faktor obremenitve. Na primer
// HashSet with default capacity and load factor HashSet numbers1 = new HashSet();
Privzeto,
- zmogljivost razpršenega nabora bo 16
- faktor obremenitve bo 0,75
Metode HashSet
HashSet
Razred določa različne metode, ki nam omogočajo, da opravljajo različne dejavnosti na snemanju.
Vstavite elemente v HashSet
add()
- vstavi navedeni element v naboraddAll()
- vstavi vse elemente določene zbirke
Na primer
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); ) )
Izhod
HashSet: (2, 4, 6) Nov HashSet: (2, 4, 5, 6)
Dostopite do elementov HashSet
Za dostop do elementov razpršenega nabora lahko uporabimo iterator()
metodo. Za uporabo te metode moramo java.util.Iterator
paket uvoziti . Na primer
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(", "); ) ) )
Izhod
HashSet: (2, 5, 6) HashSet z uporabo Iteratorja: 2, 5, 6,
Odstrani elemente
remove()
- odstrani navedeni element iz nizaremoveAll()
- odstrani vse elemente iz nabora
Na primer
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); ) )
Izhod
HashSet: (2, 5, 6) Ali je 5 odstranjenih? true Ali so vsi elementi odstranjeni? prav
Nastavite operacije
Različne metode HashSet
razreda lahko uporabimo tudi za izvajanje različnih nastavljenih operacij.
Zveza sklopov
Za izvedbo združitve med dvema nizoma lahko uporabimo addAll()
metodo. Na primer
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); ) )
Izhod
HashSet1: (2, 4) HashSet2: (1, 3) Union je: (1, 2, 3, 4)
Presečišče množic
Za izvedbo presečišča med dvema nizoma lahko uporabimo retainAll()
metodo. Na primer
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); ) )
Izhod
HashSet1: (2, 3) HashSet2: (2, 4) Presečišče je: (2)
Razlika v kompletih
Za izračun razlike med obema nizoma lahko uporabimo removeAll()
metodo. Na primer
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); ) )
Izhod
HashSet1: (2, 3, 5) HashSet2: (1, 3, 5) Razlika: (2)
Podnabor
Če želimo preveriti, ali je niz podnabor drugega niza, lahko uporabimo containsAll()
metodo. Na primer
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); ) )
Izhod
HashSet1: (1, 2, 3, 4) HashSet2: (2, 3) Ali je HashSet2 podmnožica HashSet1? prav
Druge metode HashSet
Metoda | Opis |
---|---|
clone() | Ustvari kopijo datoteke HashSet |
contains() | Poišče HashSet navedeni element in vrne logični rezultat |
isEmpty() | Preveri, če je polje HashSet prazno |
size() | Vrne velikost datoteke HashSet |
clear() | Odstrani vse elemente iz HashSet |
Če želite izvedeti več o metodah HashSet, obiščite Java HashSet (uradna dokumentacija Java).
Zakaj HashSet?
V Javi HashSet
se pogosto uporablja, če moramo do elementov naključno dostopati. To je zato, ker se do elementov v razpršeni tabeli dostopa s pomočjo zgoščevalnih kod.
Hashcode elementa je edinstvena identiteta, ki pomaga prepoznati element v hash tabeli.
HashSet
ne more vsebovati podvojenih elementov. Zato ima vsak element nabora zgoščene kode enolično hashcode.
Opomba: HashSet ni sinhroniziran. To pomeni, če več niti hkrati dostopa do nabora zgoščenih elementov in ena od niti spremeni nabor zgoščenih podatkov. Potem mora biti sinhroniziran od zunaj.