Java HashSet

Ebben az oktatóanyagban megismerhetjük a Java HashSet osztályt. Példák segítségével megismerkedünk a különböző hash set módszerekkel és műveletekkel.

A HashSetJava Gyűjtemények keretrendszere biztosítja a hash tábla adatstruktúrájának funkcióit.

Megvalósítja a Set felületet.

HashSet létrehozása

Kivonatkészlet létrehozásához java.util.HashSetelőször importálnunk kell a csomagot.

Miután importáltuk a csomagot, a következőképpen készíthetünk kivonatkészleteket a Java-ban.

 // HashSet with 8 capacity and 0.75 load factor HashSet numbers = new HashSet(8, 0.75); 

Itt létrehoztunk egy hash készletet, amelynek neve numbers.

Figyelem, az új rész HashSet(8, 0.75). Itt az első paraméter a kapacitás , a második pedig a loadFactor .

  • kapacitás - Ennek a kivonatkészletnek a kapacitása 8. Ez azt jelenti, hogy 8 elemet képes tárolni.
  • loadFactor - Ennek a kivonatkészletnek a terhelési tényezője 0,6. Ez azt jelenti, hogy ha a kivonatkészletünk 60% -kal kitöltődik, az elemeket egy új hash-táblázatba helyezzük át, amely duplája az eredeti hash-tábla méretének.

Alapértelmezett kapacitás és terhelési tényező

Kiválasztható egy hash tábla anélkül, hogy meghatározná annak kapacitását és terhelési tényezőjét. Például,

 // HashSet with default capacity and load factor HashSet numbers1 = new HashSet(); 

Alapértelmezés szerint,

  • a hash készlet kapacitása 16 lesz
  • a terhelési tényező 0,75 lesz

A HashSet módszerei

Az HashSetosztály különféle módszereket kínál, amelyek lehetővé teszik számunkra a különböző műveletek végrehajtását a forgatáson.

Helyezze be az elemeket a HashSetbe

  • add() - beszúrja a megadott elemet a halmazba
  • addAll() - beszúrja a készletbe a megadott gyűjtemény összes elemét

Például,

 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); ) ) 

Kimenet

 HashSet: (2, 4, 6) Új HashSet: (2, 4, 5, 6) 

Hozzáférés a HashSet elemekhez

A kivonatkészlet elemeihez való hozzáféréshez használhatjuk a iterator()módszert. Ennek a módszernek a használatához importálnunk kell a java.util.Iteratorcsomagot. Például,

 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(", "); ) ) ) 

Kimenet

 HashSet: (2, 5, 6) HashSet az Iterator használatával: 2, 5, 6, 

Elemek eltávolítása

  • remove() - eltávolítja a megadott elemet a halmazból
  • removeAll() - eltávolítja az összes elemet a készletből

Például,

 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); ) ) 

Kimenet

HashSet: (2, 5, 6) 5 eltávolításra került? igaz Minden elem eltávolításra került? igaz

Műveletek beállítása

Az HashSetosztály különböző módszerei különféle halmazműveletek végrehajtására is használhatók.

Szettek Szövetsége

Két halmaz közötti unió végrehajtásához használhatjuk a addAll()módszert. Például,

 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); ) ) 

Kimenet

 HashSet1: (2, 4) HashSet2: (1, 3) Az Unió: (1, 2, 3, 4) 

A halmazok metszéspontja

Két halmaz metszéspontjának végrehajtásához használhatjuk a retainAll()módszert. Például

 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); ) ) 

Kimenet

 HashSet1: (2, 3) HashSet2: (2, 4) A kereszteződés: (2) 

A halmazok különbsége

A két halmaz közötti különbség kiszámításához használhatjuk a removeAll()módszert. Például,

 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); ) ) 

Kimenet

 HashSet1: (2, 3, 5) HashSet2: (1, 3, 5) Különbség: (2) 

Részhalmaz

Használhatjuk a containsAll()módszert annak ellenőrzésére, hogy egy halmaz egy másik halmaz részhalmaza-e vagy sem . Például,

 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); ) ) 

Kimenet

HashSet1: (1, 2, 3, 4) HashSet2: (2, 3) A HashSet2 a HashSet1 részhalmaza? igaz

A HashSet egyéb módszerei

Módszer Leírás
clone() Létrehozza a HashSet
contains() Megkeresi a HashSetmegadott elemet, és logikai eredményt ad vissza
isEmpty() Ellenőrzi, hogy az HashSetüres-e
size() Visszaadja a HashSet
clear() Eltávolítja az összes elemet a HashSet

Ha többet szeretne megtudni a HashSet módszerekről, látogasson el a Java HashSet (hivatalos Java dokumentáció) oldalra.

Miért éppen a HashSet?

A Java-ban HashSetáltalában akkor használják, ha véletlenszerűen kell hozzáférnünk az elemekhez. Ez azért van, mert a hash tábla elemeihez hash kódokat használnak.

Az elem hashcode-ja egyedi identitás, amely segít azonosítani az elemet a hash-táblában.

HashSetnem tartalmazhat ismétlődő elemeket. Ezért minden hash set elemnek egyedi hashcode-ja van.

Megjegyzés: A HashSet nincs szinkronizálva. Ez akkor lehetséges, ha egyszerre több szál fér hozzá a kivonatkészlethez, és az egyik szál módosítja a kivonatkészletet. Ezután külsőleg szinkronizálni kell.

érdekes cikkek...