I denne opplæringen vil vi lære om Java HashSet-klassen. Vi lærer om forskjellige hashsettmetoder og operasjoner ved hjelp av eksempler.
Den HashSet
klasse av Java-samlinger rammeverket gir funksjonaliteten av nummertabellen datastrukturen.
Den implementerer Set-grensesnittet.
Opprette et HashSet
For å lage et hash-sett, må vi først importere java.util.HashSet
pakken.
Når vi har importert pakken, kan du lage hash-sett i Java.
// HashSet with 8 capacity and 0.75 load factor HashSet numbers = new HashSet(8, 0.75);
Her har vi laget et hash-sett med navnet numbers
.
Legg merke til, delen er ny HashSet(8, 0.75)
. Her er den første parameteren kapasitet , og den andre parameteren er loadFactor .
- kapasitet - Kapasiteten til dette hash-settet er 8. Det betyr at det kan lagre 8 elementer.
- loadFactor - Lastfaktoren for dette hash-settet er 0,6. Dette betyr at når hash-settet vårt fylles med 60%, flyttes elementene til en ny hash-tabell med dobbel størrelse på den opprinnelige hash-tabellen.
Standard kapasitet og lastfaktor
Det er mulig å lage en hash-tabell uten å definere kapasitet og lastfaktor. For eksempel,
// HashSet with default capacity and load factor HashSet numbers1 = new HashSet();
Som standard
- kapasiteten til hash-settet vil være 16
- lastfaktoren vil være 0,75
Metoder for HashSet
Den HashSet
klassen gir ulike metoder som tillater oss å utføre ulike operasjoner på settet.
Sett inn elementer i HashSet
add()
- setter inn det angitte elementet i settetaddAll()
- setter inn alle elementene i den spesifiserte samlingen i settet
For eksempel,
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); ) )
Produksjon
HashSet: (2, 4, 6) Ny HashSet: (2, 4, 5, 6)
Få tilgang til HashSet Elements
For å få tilgang til elementene i et hash-sett, kan vi bruke iterator()
metoden. For å kunne bruke denne metoden, må vi importere java.util.Iterator
pakken. For eksempel,
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(", "); ) ) )
Produksjon
HashSet: (2, 5, 6) HashSet ved hjelp av Iterator: 2, 5, 6,
Fjern elementer
remove()
- fjerner det angitte elementet fra settetremoveAll()
- fjerner alle elementene fra settet
For eksempel,
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); ) )
Produksjon
HashSet: (2, 5, 6) Er 5 fjernet? true Er alle elementene fjernet? ekte
Sett operasjoner
De forskjellige metodene i HashSet
klassen kan også brukes til å utføre forskjellige settoperasjoner.
Union of Sets
For å utføre foreningen mellom to sett, kan vi bruke addAll()
metoden. For eksempel,
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); ) )
Produksjon
HashSet1: (2, 4) HashSet2: (1, 3) Union er: (1, 2, 3, 4)
Kryss av sett
For å utføre skjæringspunktet mellom to sett, kan vi bruke retainAll()
metoden. For eksempel
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); ) )
Produksjon
HashSet1: (2, 3) HashSet2: (2, 4) Krysset er: (2)
Forskjell mellom sett
For å beregne forskjellen mellom de to settene, kan vi bruke removeAll()
metoden. For eksempel,
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); ) )
Produksjon
HashSet1: (2, 3, 5) HashSet2: (1, 3, 5) Forskjell: (2)
Delsett
For å sjekke om et sett er et delsett av et annet sett eller ikke, kan vi bruke containsAll()
metoden. For eksempel,
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); ) )
Produksjon
HashSet1: (1, 2, 3, 4) HashSet2: (2, 3) Er HashSet2 en delmengde av HashSet1? ekte
Andre metoder for HashSet
Metode | Beskrivelse |
---|---|
clone() | Lager en kopi av HashSet |
contains() | Søker HashSet etter det angitte elementet og returnerer et boolsk resultat |
isEmpty() | Sjekker om det HashSet er tomt |
size() | Returnerer størrelsen på HashSet |
clear() | Fjerner alle elementene fra HashSet |
For å lære mer om HashSet-metoder, besøk Java HashSet (offisiell Java-dokumentasjon).
Hvorfor HashSet?
I Java HashSet
brukes det ofte hvis vi må få tilgang til elementer tilfeldig. Det er fordi du får tilgang til elementer i en hashtabell ved hjelp av hash-koder.
Hashkoden til et element er en unik identitet som hjelper til med å identifisere elementet i en hash-tabell.
HashSet
kan ikke inneholde dupliserte elementer. Derfor har hvert hasksettelement en unik hashkode.
Merk: HashSet er ikke synkronisert. Det er hvis flere tråder får tilgang til hash-settet samtidig, og en av trådene endrer hash-settet. Da må den synkroniseres eksternt.