Tässä opetusohjelmassa opitaan Java HashSet -luokasta. Opimme erilaisista hash-asetetuista menetelmistä ja operaatioista esimerkkien avulla.
HashSet
Luokka Java kokoelmat puitteet muodostavat toiminnot hajautustaulukossa tietorakenteen.
Se toteuttaa Set-käyttöliittymän.
HashSetin luominen
Hajautusjoukon luomiseksi meidän on java.util.HashSet
ensin 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
HashSet
Luokka tarjoaa erilaisia menetelmiä, joiden avulla voimme suorittaa erilaisia toimenpiteitä päälle.
Lisää elementit HashSetiin
add()
- lisää määritetyn elementin joukkoonaddAll()
- 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.Iterator
paketti. 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 joukostaremoveAll()
- 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
HashSet
Luokan 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 HashSet määritetyn elementin ja palauttaa loogisen tuloksen |
isEmpty() | Tarkistaa onko HashSet tyhjä |
size() | Palauttaa HashSet |
clear() | Poistaa kaikki elementit HashSet |
Lisätietoja HashSet-menetelmistä on Java HashSetissä (virallinen Java-dokumentaatio).
Miksi HashSet?
Java: ssa HashSet
sitä 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.
HashSet
ei 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.