Java HashSet

V tej vadnici bomo spoznali razred Java HashSet. S pomočjo primerov bomo spoznali različne metode in operacije razprševanja.

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

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

HashSetRazred 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 nabor
  • addAll() - 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.Iteratorpaket 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 niza
  • removeAll() - 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 HashSetrazreda 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 HashSetnavedeni element in vrne logični rezultat
isEmpty() Preveri, če je polje HashSetprazno
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 HashSetse 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.

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

Zanimive Članki...