Java HashSet

Tässä opetusohjelmassa opitaan Java HashSet -luokasta. Opimme erilaisista hash-asetetuista menetelmistä ja operaatioista esimerkkien avulla.

HashSetLuokka Java kokoelmat puitteet muodostavat toiminnot hajautustaulukossa tietorakenteen.

Se toteuttaa Set-käyttöliittymän.

HashSetin luominen

Hajautusjoukon luomiseksi meidän on java.util.HashSetensin tuotava paketti.

Kun paketti on tuotu, näin voimme luoda hash-sarjoja Javalaan.

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

Tässä olemme luoneet hash-sarjan nimeltä numbers.

Huomaa, uusi osa HashSet(8, 0.75). Ensimmäinen parametri on kapasiteetti ja toinen parametri loadFactor .

  • kapasiteetti - Tämän hajautusjoukon kapasiteetti on 8. Tämä tarkoittaa, että se voi tallentaa 8 elementtiä.
  • loadFactor - Tämän hajautusjoukon kuormituskerroin on 0,6. Tämä tarkoittaa, että aina kun hajautusjoukkomme täyttyy 60%, elementit siirretään uuteen hajautustaulukkoon, joka on kaksinkertainen alkuperäisen hajataulukon kokoon nähden.

Oletuskapasiteetti ja kuormituskerroin

Hajautustaulukko on mahdollista luoda määrittelemättä sen kapasiteettia ja kuormituskerrointa. Esimerkiksi,

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

Oletuksena,

  • hajautusjoukon kapasiteetti on 16
  • kuormituskerroin on 0,75

HashSetin menetelmät

HashSetLuokka tarjoaa erilaisia menetelmiä, joiden avulla voimme suorittaa erilaisia toimenpiteitä päälle.

Lisää elementit HashSetiin

  • add() - lisää määritetyn elementin joukkoon
  • addAll() - lisää kaikki määritetyn kokoelman elementit sarjaan

Esimerkiksi,

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

Tuotos

 HashSet: (2, 4, 6) Uusi HashSet: (2, 4, 5, 6) 

Käytä HashSet-elementtejä

Voit käyttää hajautusjoukon elementtejä käyttämällä iterator()menetelmää. Tämän menetelmän käyttämiseksi meidän on tuotava java.util.Iteratorpaketti. Esimerkiksi,

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

Tuotos

 HashSet: (2, 5, 6) HashSet käyttämällä Iteratoria: 2, 5, 6, 

Poista elementit

  • remove() - poistaa määritetyn elementin joukosta
  • removeAll() - poistaa kaikki elementit sarjasta

Esimerkiksi,

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

Tuotos

HashSet: (2, 5, 6) Poistetaanko 5? true Poistetaanko kaikki elementit? totta

Aseta toiminnot

HashSetLuokan eri menetelmiä voidaan käyttää myös erilaisten joukkooperaatioiden suorittamiseen.

Sarjojen liitto

Kahden ryhmän välisen liitoksen suorittamiseksi voimme käyttää addAll()menetelmää. Esimerkiksi,

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

Tuotos

 HashSet1: (2, 4) HashSet2: (1, 3) Unioni on: (1, 2, 3, 4) 

Joukkojen leikkauspiste

Kahden ryhmän leikkauksen suorittamiseksi voimme käyttää retainAll()menetelmää. Esimerkiksi

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

Tuotos

 HashSet1: (2, 3) HashSet2: (2, 4) Risteys on: (2) 

Sarjojen ero

Kahden ryhmän eron laskemiseksi voimme käyttää removeAll()menetelmää. Esimerkiksi,

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

Tuotos

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

Alajoukko

Voit tarkistaa, onko joukko toisen joukon osajoukko vai ei, voimme käyttää containsAll()menetelmää. Esimerkiksi,

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

Tuotos

HashSet1: (1, 2, 3, 4) HashSet2: (2, 3) Onko HashSet2 HashSet1: n osajoukko? totta

Muut HashSetin menetelmät

Menetelmä Kuvaus
clone() Luo kopion HashSet
contains() Hakee HashSetmääritetyn elementin ja palauttaa loogisen tuloksen
isEmpty() Tarkistaa onko HashSettyhjä
size() Palauttaa HashSet
clear() Poistaa kaikki elementit HashSet

Lisätietoja HashSet-menetelmistä on Java HashSetissä (virallinen Java-dokumentaatio).

Miksi HashSet?

Java: ssa HashSetsitä käytetään yleisesti, jos meidän on käytettävä elementtejä satunnaisesti. Tämä johtuu siitä, että hash-taulukon elementteihin pääsee käyttämällä hash-koodeja.

Elementin hashcode on ainutlaatuinen identiteetti, joka auttaa tunnistamaan hash-taulukon elementin.

HashSetei voi sisältää päällekkäisiä elementtejä. Näin ollen jokaisella hash-asetuselementillä on ainutlaatuinen hashcode.

Huomaa: HashSetiä ei ole synkronoitu. Eli jos useat säikeet käyttävät hajautusjoukkoa samanaikaisesti ja yksi säikeistä muuttaa hajautusjoukkoa. Sitten se on synkronoitava ulkoisesti.

Mielenkiintoisia artikkeleita...