Selles õpetuses õpime tundma Java HashSeti klassi. Näidete abil õpime tundma erinevaid räsikomplekti meetodeid ja toiminguid.
HashSet
Klassi Java Collections raames annab funktsioonid hash tabeli andmed struktuuri.
See rakendab liidest Set.
HashSeti loomine
Räsikomplekti loomiseks peame java.util.HashSet
esmalt paketi importima .
Kui pakett on imporditud, saate Java-s räsikomplekte luua järgmiselt.
// HashSet with 8 capacity and 0.75 load factor HashSet numbers = new HashSet(8, 0.75);
Siin oleme loonud räsikomplekti nimega numbers
.
Pange tähele, et osa on uus HashSet(8, 0.75)
. Siin on esimene parameeter mahtuvus ja teine parameeter loadFactor .
- maht - selle räsikomplekti maht on 8. See tähendab, et see võib salvestada 8 elementi.
- loadFactor - selle räsikomplekti koormustegur on 0,6. See tähendab, et alati, kui meie räsikomplekt täidetakse 60%, viiakse elemendid uude räsitabelisse, mis on algse räsitabeli kahekordne.
Vaikimisi maht ja koormustegur
Räsi tabelit on võimalik luua ilma selle võimsust ja koormustegurit määramata. Näiteks,
// HashSet with default capacity and load factor HashSet numbers1 = new HashSet();
Vaikimisi,
- räsikomplekti maht on 16
- koormustegur on 0,75
HashSeti meetodid
HashSet
Klassi pakub erinevaid meetodeid, mis võimaldavad meil sooritada erinevaid toiminguid komplekti.
Sisestage elemendid HashSetti
add()
- lisab määratud elemendi komplektiaddAll()
- sisestab komplekti kõik määratletud kogu elemendid
Näiteks,
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); ) )
Väljund
HashSet: (2, 4, 6) Uus HashSet: (2, 4, 5, 6)
Juurdepääs HashSeti elementidele
Räsikomplekti elementidele juurde pääsemiseks saame kasutada iterator()
meetodit. Selle meetodi kasutamiseks peame java.util.Iterator
pakendi importima . Näiteks,
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(", "); ) ) )
Väljund
HashSet: (2, 5, 6) HashSet, kasutades Iteratorit: 2, 5, 6,
Eemalda elemendid
remove()
- eemaldab määratud elemendi komplektistremoveAll()
- eemaldab komplektist kõik elemendid
Näiteks,
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); ) )
Väljund
HashSet: (2, 5, 6) Kas 5 on eemaldatud? true Kas kõik elemendid on eemaldatud? tõsi
Määra toimingud
HashSet
Klassi erinevaid meetodeid saab kasutada ka erinevate komplektoperatsioonide sooritamiseks.
Komplektide liit
Kahe komplekti vahelise liidu teostamiseks saame kasutada addAll()
meetodit. Näiteks,
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); ) )
Väljund
HashSet1: (2, 4) HashSet2: (1, 3) Liit on: (1, 2, 3, 4)
Komplektide ristumiskoht
Kahe komplekti ristumiskoha teostamiseks saame kasutada retainAll()
meetodit. Näiteks
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); ) )
Väljund
HashSet1: (2, 3) HashSet2: (2, 4) Ristmik on: (2)
Komplektide erinevus
Kahe komplekti erinevuse arvutamiseks võime kasutada removeAll()
meetodit. Näiteks,
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); ) )
Väljund
HashSet1: (2, 3, 5) HashSet2: (1, 3, 5) Erinevus: (2)
Alamhulk
Et kontrollida, kas komplekt on mõne teise hulga alamhulk või mitte, saame kasutada containsAll()
meetodit. Näiteks,
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); ) )
Väljund
HashSet1: (1, 2, 3, 4) HashSet2: (2, 3) Kas HashSet2 on HashSet1 alamhulk? tõsi
HashSeti muud meetodid
Meetod | Kirjeldus |
---|---|
clone() | Loob faili koopia HashSet |
contains() | Otsib HashSet määratud elementi ja tagastab tõeväärtuse tulemuse |
isEmpty() | Kontrollib, kas see HashSet on tühi |
size() | Tagastab HashSet |
clear() | Eemaldab rakendusest kõik elemendid HashSet |
HashSeti meetodite kohta lisateabe saamiseks külastage Java HashSeti (ametlik Java dokumentatsioon).
Miks just HashSet?
Java-s HashSet
kasutatakse seda tavaliselt juhul, kui peame elementidele juurde pääsema juhuslikult. Sellepärast, et räsitabeli elementidele pääseb juurde räsikoodide abil.
Elemendi räsikood on kordumatu identiteet, mis aitab tuvastada räsitabeli elemendi.
HashSet
ei tohi sisaldada duplikaatelemente. Seega on igal räsikomplekti elemendil unikaalne räsikood.
Märkus. HashSeti pole sünkroonitud. See on siis, kui mitu lõime pääseb korraga räsikomplekti juurde ja üks lõime muudab räsikomplekti. Siis tuleb see väliselt sünkroniseerida.