Java WeakHashMap

V tomto výučbe sa pomocou príkladov dozvieme o prostredí Java WeakHashMap a jeho operáciách. Dozvieme sa tiež o rozdieloch medzi WeakHashMap a HashMap

WeakHashMapTrieda zbierok rámca Java poskytuje funkcie dátovej štruktúry hash tabuľky …

Implementuje rozhranie Mapy.

Poznámka : Klávesy slabej hashmapy sú typu WeakReference .

Objekt slabého typu referencie môže byť odpadky zhromažďované v Jave, ak sa referencia v programe už nepoužíva.

Naučme sa najskôr vytvoriť slabú hashovaciu mapu. Potom sa dozvieme, ako sa líši od hashmapy.

Vytvorte mapu WeakHashMap

Aby sme vytvorili slabú hashmapu, musíme najskôr importovať java.util.WeakHashMapbalík. Po importovaní balíka tu môžeme vytvoriť slabé hashmapy v Jave.

 //WeakHashMap creation with capacity 8 and load factor 0.6 WeakHashMap numbers = new WeakHashMap(8, 0.6); 

Vo vyššie uvedenom kóde sme vytvorili slabú hashmapu pomenovanú čísla.

Tu,

  • Kľúč - jedinečný identifikátor, ktorý sa používa na priradenie každého prvku (hodnoty) k mape
  • Hodnota - prvky spojené s klávesmi na mape

Všimnite si časť new WeakHashMap(8, 0.6). Tu je prvým parametrom kapacita a druhým parametrom je loadFactor .

  • kapacita - kapacita tejto mapy je 8. To znamená, že do nej možno uložiť 8 záznamov.
  • loadFactor - Faktor zaťaženia tejto mapy je 0,6. To znamená, že kedykoľvek je naša hash tabuľka naplnená o 60%, položky sú presunuté do novej hash tabuľky s dvojnásobnou veľkosťou ako pôvodná hash tabuľka.

Predvolená kapacita a faktor zaťaženia

Je možné vytvoriť slabú hashmapu bez definovania jej kapacity a koeficientu zaťaženia. Napríklad,

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

Predvolene,

  • kapacita mapy bude 16
  • činiteľ zaťaženia bude 0,75

Rozdiely medzi HashMap a WeakHashMap

Uvidíme implementáciu slabej hashmapy v Jave.

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

Výkon

 WeakHashMap: (štyri = 4, dve = 2) WeakHashMap po zbere odpadu: (štyri) 

Ako vidíme, keď je kľúč dva slabej hashmapy nastavený na nulla vykonáva odvoz odpadu, kľúč je odstránený.

Je to preto, že na rozdiel od hashmaps sú kľúče slabých hashmap slabého referenčného typu. To znamená, že záznam mapy odstráni garbage collector, ak sa kľúč k tomuto záznamu už nebude používať. To je užitočné na šetrenie zdrojov.

Teraz sa pozrime na rovnakú implementáciu v hashmape.

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

Výkon

 HashMap: (štyri = 4, dva = 2) HashMap po zbere odpadu: (štyri = 4, dva = 2) 

Tu, keď je kľúč dva z hashmap nastavený na nulla vykonáva odvoz odpadu, kľúč sa neodstráni.

Je to preto, že na rozdiel od slabých hashmaps majú kľúče hashmaps silný referenčný typ. To znamená, že program na odstraňovanie odpadu neodstráni záznam mapy, aj keď sa kľúč k tomuto záznamu už nepoužíva.

Poznámka : Všetky funkčnosti hashmap a slabých hashmap sú podobné, až na to, že kľúče slabého hashmapu majú slabú referenciu, zatiaľ čo kľúče hashmap sú silnej referencie.

Vytváranie WeakHashMap z iných máp

Týmto spôsobom môžeme vytvoriť slabú hashmapu z iných máp.

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

Výkon

 HashMap: (dva = 2) WeakHashMap: (dva = 2) 

Metódy WeakHashMap

WeakHashMapTrieda poskytuje metódy, ktoré nám umožnia vykonávať rôzne operácie na mape.

Vložte prvky do WeakHashMap

  • put() - vloží zadané mapovanie kľúča / hodnoty do mapy
  • putAll() - vloží všetky záznamy z určenej mapy na túto mapu
  • putIfAbsent() - vloží zadané mapovanie kľúča / hodnoty do mapy, ak sa uvedený kľúč na mape nenachádza

Napríklad,

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

Výkon

 WeakHashMap párnych čísel: (štyri = 4, dva = 2) WeakHashMap čísel: (dva = 2, štyri = 4, jeden = 1) 

Prístup k prvkom WeakHashMap

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: (dva = 2, jeden = 1) Odstránená hodnota: 2 Je položka (jeden = 3) odstránená? Falošne aktualizovaná mapa WeakHashMap: (jedna = 1)

Ďalšie metódy WeakHashMap

Metóda Popis
clear() Odstráni všetky záznamy z mapy
containsKey() Skontroluje, či mapa obsahuje zadaný kľúč, a vráti boolovskú hodnotu
containsValue() Skontroluje, či mapa obsahuje zadanú hodnotu, a vráti boolovskú hodnotu
size() Vráti veľkosť mapy
isEmpty() Skontroluje, či je mapa prázdna, a vráti boolovskú hodnotu

Ak sa chcete dozvedieť viac, navštívte stránku Java WeakHashMap (oficiálna dokumentácia Java).

Zaujímavé články...