Java WeakHashMap

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 WeakHashMapJava 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.WeakHashMapelő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 nullszemé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 WeakHashMaposztá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ést
  • putAll() - beszúrja a megadott térkép összes bejegyzését erre a térképre
  • putIfAbsent() - 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 map
  • keySet() - returns a set of all the keys of the map
  • values() - 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. Returns null 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 map
  • remove(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ó).

érdekes cikkek...