I denne vejledning lærer vi om Java HashSet-klassen. Vi lærer om forskellige hash-sæt metoder og operationer ved hjælp af eksempler.
Den HashSet
klasse af rammerne Java Samlinger indeholder funktionaliteter hash tabellen datastruktur.
Det implementerer Set-grænsefladen.
Oprettelse af et HashSet
For at oprette et hash-sæt skal vi først importere java.util.HashSet
pakken.
Når vi først har importeret pakken, kan du oprette hash-sæt i Java her.
// HashSet with 8 capacity and 0.75 load factor HashSet numbers = new HashSet(8, 0.75);
Her har vi oprettet et hash-sæt med navnet numbers
.
Bemærk, den nye del HashSet(8, 0.75)
. Her er den første parameter kapacitet , og den anden parameter er loadFactor .
- kapacitet - Kapaciteten for dette hash-sæt er 8. Det betyder, at det kan gemme 8 elementer.
- loadFactor - Belastningsfaktoren for dette hash-sæt er 0,6. Dette betyder, at når vores hash-sæt er fyldt med 60%, flyttes elementerne til en ny hash-tabel, der er dobbelt så stor som den oprindelige hash-tabel.
Standardkapacitet og belastningsfaktor
Det er muligt at oprette en hash-tabel uden at definere dens kapacitet og belastningsfaktor. For eksempel,
// HashSet with default capacity and load factor HashSet numbers1 = new HashSet();
Som standard,
- hashsættets kapacitet er 16
- belastningsfaktoren er 0,75
Metoder til HashSet
Den HashSet
klasse giver forskellige metoder, der tillader os at udføre forskellige operationer på sættet.
Indsæt elementer til HashSet
add()
- indsætter det angivne element i sættetaddAll()
- indsætter alle elementerne i den angivne samling i sættet
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); ) )
Produktion
HashSet: (2, 4, 6) Nyt HashSet: (2, 4, 5, 6)
Adgang til HashSet-elementer
For at få adgang til elementerne i et hash-sæt kan vi bruge iterator()
metoden. For at kunne bruge denne metode skal 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(", "); ) ) )
Produktion
HashSet: (2, 5, 6) HashSet ved hjælp af Iterator: 2, 5, 6,
Fjern elementer
remove()
- fjerner det angivne element fra sættetremoveAll()
- fjerner alle elementerne fra sættet
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); ) )
Produktion
HashSet: (2, 5, 6) Er 5 fjernet? sand Er alle elementer fjernet? sand
Indstil operationer
De forskellige metoder i HashSet
klassen kan også bruges til at udføre forskellige sætoperationer.
Union af sæt
For at udføre foreningen mellem to sæt kan vi bruge 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); ) )
Produktion
HashSet1: (2, 4) HashSet2: (1, 3) Union er: (1, 2, 3, 4)
Kryds af sæt
For at udføre krydset mellem to sæt kan vi bruge 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); ) )
Produktion
HashSet1: (2, 3) HashSet2: (2, 4) Skæringspunktet er: (2)
Forskel mellem sæt
For at beregne forskellen mellem de to sæt kan vi bruge 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); ) )
Produktion
HashSet1: (2, 3, 5) HashSet2: (1, 3, 5) Forskel: (2)
Delmængde
For at kontrollere, om et sæt er et undersæt af et andet sæt eller ej, kan vi bruge 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); ) )
Produktion
HashSet1: (1, 2, 3, 4) HashSet2: (2, 3) Er HashSet2 en delmængde af HashSet1? sand
Andre metoder til HashSet
Metode | Beskrivelse |
---|---|
clone() | Opretter en kopi af HashSet |
contains() | Søger HashSet efter det angivne element og returnerer et boolsk resultat |
isEmpty() | Kontrollerer, om den HashSet er tom |
size() | Returnerer størrelsen på HashSet |
clear() | Fjerner alle elementerne fra HashSet |
For at lære mere om HashSet-metoder, besøg Java HashSet (officiel Java-dokumentation).
Hvorfor HashSet?
I Java HashSet
bruges det ofte, hvis vi er nødt til at få adgang til elementer tilfældigt. Det skyldes, at der er adgang til elementer i en hash-tabel ved hjælp af hash-koder.
Hashets kode for et element er en unik identitet, der hjælper med at identificere elementet i en hash-tabel.
HashSet
kan ikke indeholde duplikatelementer. Derfor har hvert hash-element en unik hashcode.
Bemærk: HashSet er ikke synkroniseret. Det er, hvis flere tråde får adgang til hashsættet på samme tid, og en af tråde ændrer hashsættet. Derefter skal den synkroniseres eksternt.