Java HashSet

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 HashSetklass 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.HashSetpaketet.

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 HashSetklassen 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ättningen
  • addAll() - 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.Iteratorpaketet. 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ättningen
  • removeAll() - 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 HashSetklassen 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 HashSetefter 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 HashSetofta 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.

HashSetfå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.

Intressanta artiklar...