I den här handledningen lär vi oss om Java HashSet-klassen. Vi lär oss om olika hashuppsättningsmetoder och operationer med hjälp av exempel.
Den HashSet
klass av ramen för Java samlingar tillhandahåller funktionerna i hashtabellen datastruktur.
Den implementerar Set-gränssnittet.
Skapa en HashSet
För att skapa en hash-uppsättning måste vi först importera java.util.HashSet
paketet.
När vi väl har importerat paketet, här kan vi skapa hash-uppsättningar i Java.
// HashSet with 8 capacity and 0.75 load factor HashSet numbers = new HashSet(8, 0.75);
Här har vi skapat en hash-uppsättning med namnet numbers
.
Lägg märke till, delen är ny HashSet(8, 0.75)
. Här är den första parametern kapacitet och den andra parametern är loadFactor .
- Kapacitet - Kapaciteten för denna hashuppsättning är 8. Det betyder att den kan lagra 8 element.
- loadFactor - Lastfaktorn för denna hashuppsättning är 0,6. Detta betyder att när vårt hash-set fylls med 60% flyttas elementen till en ny hash-tabell med dubbelt så stor som den ursprungliga hash-tabellen.
Standardkapacitet och lastfaktor
Det är möjligt att skapa en hashtabell utan att definiera dess kapacitet och belastningsfaktor. Till exempel,
// HashSet with default capacity and load factor HashSet numbers1 = new HashSet();
Som standard,
- hashuppsättningen kommer att vara 16
- belastningsfaktorn blir 0,75
Metoder för HashSet
I HashSet
klassen tillhandahåller olika metoder som tillåter oss att utföra olika operationer på apparaten.
Infoga element till HashSet
add()
- infogar det angivna elementet i uppsättningenaddAll()
- infogar alla element i den angivna samlingen i uppsättningen
Till exempel,
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) Ny HashSet: (2, 4, 5, 6)
Åtkomst till HashSet-element
För att komma åt elementen i en hashuppsättning kan vi använda iterator()
metoden. För att kunna använda den här metoden måste vi importera java.util.Iterator
paketet. Till exempel,
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 med Iterator: 2, 5, 6,
Ta bort element
remove()
- tar bort det angivna elementet från uppsättningenremoveAll()
- tar bort alla element från uppsättningen
Till exempel,
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) Är 5 borttagen? true Är alla element borttagna? Sann
Ställ in funktioner
De olika metoderna i HashSet
klassen kan också användas för att utföra olika uppsättningsoperationer.
Union of Sets
För att utföra föreningen mellan två uppsättningar kan vi använda addAll()
metoden. Till exempel,
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) Unionen är: (1, 2, 3, 4)
Korsning av uppsättningar
För att utföra korsningen mellan två uppsättningar kan vi använda retainAll()
metoden. Till exempel
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) Korsningen är: (2)
Skillnad mellan uppsättningar
För att beräkna skillnaden mellan de två uppsättningarna kan vi använda removeAll()
metoden. Till exempel,
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) Skillnad: (2)
Delmängd
För att kontrollera om en uppsättning är en delmängd av en annan uppsättning eller inte kan vi använda containsAll()
metoden. Till exempel,
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) Är HashSet2 en delmängd av HashSet1? Sann
Andra metoder för HashSet
Metod | Beskrivning |
---|---|
clone() | Skapar en kopia av HashSet |
contains() | Söker HashSet efter det angivna elementet och returnerar ett booleskt resultat |
isEmpty() | Kontrollerar om den HashSet är tom |
size() | Returnerar storleken på HashSet |
clear() | Tar bort alla element från HashSet |
För att lära dig mer om HashSet-metoder, besök Java HashSet (officiell Java-dokumentation).
Varför HashSet?
I Java används HashSet
ofta om vi måste komma åt element slumpmässigt. Det beror på att element i en hashtabell nås med hjälp av hashkoder.
Hashkoden för ett element är en unik identitet som hjälper till att identifiera elementet i en hash-tabell.
HashSet
får inte innehålla dubbletter. Därför har varje hashuppsättningselement en unik hashkod.
Obs! HashSet är inte synkroniserat. Det är om flera trådar har åtkomst till hash-uppsättningen samtidigt och en av trådarna ändrar hash-uppsättningen. Då måste den synkroniseras externt.