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 HashSet
Java 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.HashSet
elő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 HashSet
osztá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 halmazbaaddAll()
- 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.Iterator
csomagot. 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ólremoveAll()
- 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 HashSet
osztá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 HashSet megadott 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.
HashSet
nem 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.