Ebben az oktatóanyagban példák segítségével megismerhetjük a Java WeakHashMap programot és annak működését. Megismerjük a WeakHashMap és a HashMap közötti különbségeket is
A WeakHashMap
Java gyűjtemények keretrendszerének osztálya biztosítja a hash tábla adatstruktúrájának jellemzőit…
Megvalósítja a Map felületet.
Megjegyzés : A gyenge hashmap gombjai WeakReference típusúak.
A gyenge referenciatípus objektuma lehet a Java-ban összegyűjtött szemét, ha a hivatkozást már nem használják a programban.
Tanuljunk meg először gyenge hash térképet készíteni. Ezután megtudhatjuk, hogy miben különbözik a hashmap-tól.
Hozzon létre egy WeakHashMap-ot
A gyenge hashmap létrehozásához java.util.WeakHashMap
először importálnunk kell a csomagot. A csomag importálása után a következőképpen hozhatunk létre gyenge hasmapokat a Java-ban.
//WeakHashMap creation with capacity 8 and load factor 0.6 WeakHashMap numbers = new WeakHashMap(8, 0.6);
A fenti kódban létrehoztunk egy gyenge hashmap számokat.
Itt,
- Kulcs - egyedi azonosító, amelyet a térkép minden elemének (értékének) társításához használnak
- Érték - kulcsok által társított elemek a térképen
Figyeld meg a részt new WeakHashMap(8, 0.6)
. Itt az első paraméter a kapacitás , a második pedig a loadFactor .
- kapacitás - Ennek a térképnek a kapacitása 8. Ez azt jelenti, hogy 8 bejegyzést tud tárolni.
- loadFactor - A térkép terhelési tényezője 0,6. Ez azt jelenti, hogy ha a hash-táblázatunk 60% -kal kitöltődik, a bejegyzések egy új hash-táblába kerülnek, amely duplája az eredeti hash-tábla méretének.
Alapértelmezett kapacitás és terhelési tényező
Lehetséges egy gyenge hashmap létrehozása anélkül, hogy meghatároznánk annak kapacitását és terhelési tényezőjét. Például,
// WeakHashMap with default capacity and load factor WeakHashMap numbers1 = new WeakHashMap();
Alapértelmezés szerint,
- a térkép befogadóképessége 16 lesz
- a terhelési tényező 0,75 lesz
Különbségek a HashMap és a WeakHashMap között
Lássuk egy gyenge hasmap megvalósítását a Java-ban.
import java.util.WeakHashMap; class Main ( public static void main(String() args) ( // Creating WeakHashMap of numbers WeakHashMap numbers = new WeakHashMap(); String two = new String("Two"); Integer twoValue = 2; String four = new String("Four"); Integer fourValue = 4; // Inserting elements numbers.put(two, twoValue); numbers.put(four, fourValue); System.out.println("WeakHashMap: " + numbers); // Make the reference null two = null; // Perform garbage collection System.gc(); System.out.println("WeakHashMap after garbage collection: " + numbers); ) )
Kimenet
WeakHashMap: (Négy = 4, Kettő = 2) WeakHashMap szemétgyűjtés után: (Négy)
Mint láthatjuk, amikor a gyenge hashmap második kulcsát a null
szemétgyűjtésre állítják és végrehajtják, a kulcs eltávolításra kerül.
Ennek oka, hogy a hasmapokkal ellentétben a gyenge hasmaps billentyűk gyenge referencia típusúak. Ez azt jelenti, hogy a térkép bejegyzését a szemétszedő eltávolítja, ha a bejegyzéshez tartozó kulcsot már nem használják. Ez hasznos az erőforrások megtakarításához.
Most nézzük meg ugyanezt a megvalósítást egy hashmap-ban.
import java.util.HashMap; class Main ( public static void main(String() args) ( // Creating HashMap of even numbers HashMap numbers = new HashMap(); String two = new String("Two"); Integer twoValue = 2; String four = new String("Four"); Integer fourValue = 4; // Inserting elements numbers.put(two, twoValue); numbers.put(four, fourValue); System.out.println("HashMap: " + numbers); // Make the reference null two = null; // Perform garbage collection System.gc(); System.out.println("HashMap after garbage collection: " + numbers); ) )
Kimenet
HashMap: (Négy = 4, Kettő = 2) HashMap szemétgyűjtés után: (Négy = 4, Kettő = 2)
Itt, amikor a hashmap második kulcsa a szemétgyűjtés beállítása null
és végrehajtása, a kulcs nem lesz eltávolítva.
A gyenge hasmapsokkal ellentétben a hashmaps billentyűk erős referencia típusúak. Ez azt jelenti, hogy egy térkép bejegyzését a szemétgyűjtő nem távolítja el, annak ellenére, hogy a bejegyzéshez tartozó kulcsot már nem használják.
Megjegyzés : A hasmapok és a gyenge hashmapok összes funkciója hasonló, kivéve, ha a gyenge hashmap billentyűi gyenge referenciát mutatnak, míg a hashmap kulcsai erősen referenciák.
WeakHashMap létrehozása más térképekből
Így hozhatunk létre gyenge hasmapot más térképekből.
import java.util.HashMap; import java.util.WeakHashMap; class Main ( public static void main(String() args) ( // Creating a hashmap of even numbers HashMap evenNumbers = new HashMap(); String two = new String("Two"); Integer twoValue = 2; evenNumbers.put(two, twoValue); System.out.println("HashMap: " + evenNumbers); // Creating a weak hash map from other hashmap WeakHashMap numbers = new WeakHashMap(evenNumbers); System.out.println("WeakHashMap: " + numbers); ) )
Kimenet
HashMap: (Kettő = 2) Gyenge HashMap: (Kettő = 2)
A WeakHashMap módszerei
Az WeakHashMap
osztály olyan módszereket biztosít, amelyek lehetővé teszik számunkra a térképen különböző műveletek végrehajtását.
Helyezze be az elemeket a WeakHashMap fájlba
put()
- beszúrja a térképbe a megadott kulcs / érték leképezéstputAll()
- beszúrja a megadott térkép összes bejegyzését erre a térképreputIfAbsent()
- beilleszti a megadott kulcs / érték leképezést a térképbe, ha a megadott kulcs nincs a térképen
Például,
import java.util.WeakHashMap; class Main ( public static void main(String() args) ( // Creating WeakHashMap of even numbers WeakHashMap evenNumbers = new WeakHashMap(); String two = new String("Two"); Integer twoValue = 2; // Using put() evenNumbers.put(two, twoValue); String four = new String("Four"); Integer fourValue = 4; // Using putIfAbsent() evenNumbers.putIfAbsent(four, fourValue); System.out.println("WeakHashMap of even numbers: " + evenNumbers); //Creating WeakHashMap of numbers WeakHashMap numbers = new WeakHashMap(); String one = new String("One"); Integer oneValue = 1; numbers.put(one, oneValue); // Using putAll() numbers.putAll(evenNumbers); System.out.println("WeakHashMap of numbers: " + numbers); ) )
Kimenet
Páros számok térképe: (Négy = 4, Kettő = 2) WeakHashMap a számok közül: (Kettő = 2, Négy = 4, Egy = 1)
Hozzáférés a WeakHashMap elemekhez
1. Using entrySet(), keySet() and values()
entrySet()
- returns a set of all the key/value mapping of the mapkeySet()
- returns a set of all the keys of the mapvalues()
- returns a set of all the values of the map
For example,
import java.util.WeakHashMap; class Main ( public static void main(String() args) ( // Creating WeakHashMap of even numbers WeakHashMap numbers = new WeakHashMap(); String one = new String("One"); Integer oneValue = 1; numbers.put(one, oneValue); String two = new String("Two"); Integer twoValue = 2; numbers.put(two, twoValue); System.out.println("WeakHashMap: " + numbers); // Using entrySet() System.out.println("Key/Value mappings: " + numbers.entrySet()); // Using keySet() System.out.println("Keys: " + numbers.keySet()); // Using values() System.out.println("Values: " + numbers.values()); ) )
Output
WeakHashMap: (Two=2, One=1) Key/Value mappings: (Two=2, One=1) Keys: (Two, One) Values: (1, 2)
2. Using get() and getOrDefault()
get()
- Returns the value associated with the specified key. Returnsnull
if the key is not found.getOrDefault()
- Returns the value associated with the specified key. Returns the specified default value if the key is not found.
For example,
import java.util.WeakHashMap; class Main ( public static void main(String() args) ( // Creating WeakHashMap of even numbers WeakHashMap numbers = new WeakHashMap(); String one = new String("One"); Integer oneValue = 1; numbers.put(one, oneValue); String two = new String("Two"); Integer twoValue = 2; numbers.put(two, twoValue); System.out.println("WeakHashMap: " + numbers); // Using get() int value1 = numbers.get("Two"); System.out.println("Using get(): " + value1); // Using getOrDefault() int value2 = numbers.getOrDefault("Four", 4); System.out.println("Using getOrDefault(): " + value2); ) )
Output
WeakHashMap: (Two=2, One=1) Using get(): 2 Using getOrDefault(): 4
Remove WeakHashMap Elements
remove(key)
- returns and removes the entry associated with the specified key from the mapremove(key, value)
- removes the entry from the map only if the specified key mapped to the specified value and return a boolean value
For example,
import java.util.WeakHashMap; class Main ( public static void main(String() args) ( // Creating WeakHashMap of even numbers WeakHashMap numbers = new WeakHashMap(); String one = new String("One"); Integer oneValue = 1; numbers.put(one, oneValue); String two = new String("Two"); Integer twoValue = 2; numbers.put(two, twoValue); System.out.println("WeakHashMap: " + numbers); // Using remove() with single parameter int value = numbers.remove("Two"); System.out.println("Removed value: " + value); // Using remove() with 2 parameters boolean result = numbers.remove("One", 3); System.out.println("Is the entry (One=3) removed? " + result); System.out.println("Updated WeakHashMap: " + numbers); ) )
Output
WeakHashMap: (Kettő = 2, Egy = 1) Eltávolított érték: 2 Eltávolítva a bejegyzést (Egy = 3)? Hamis frissített WeakHashMap: (Egy = 1)
A WeakHashMap egyéb módszerei
Módszer | Leírás |
---|---|
clear() | Eltávolítja az összes bejegyzést a térképről |
containsKey() | Ellenőrzi, hogy a térkép tartalmazza-e a megadott kulcsot, és logikai értéket ad-e vissza |
containsValue() | Ellenőrzi, hogy a térkép tartalmazza-e a megadott értéket, és logikai értéket ad-e vissza |
size() | Visszaadja a térkép méretét |
isEmpty() | Ellenőrzi, hogy a térkép üres-e, és logikai értéket ad vissza |
További információkért látogasson el a Java WeakHashMap oldalra (hivatalos Java dokumentáció).