Java WeakHashMap

V tej vadnici bomo s pomočjo primerov spoznali Java WeakHashMap in njegovo delovanje. Spoznali bomo tudi razlike med WeakHashMap in HashMap

WeakHashMapRazred okviru Java zbirk zagotavlja značilnost strukture podatkov hash tabele …

Izvaja vmesnik Map.

Opomba : Tipke šibkega hashmapa so tipa WeakReference .

Predmet šibke referenčne vrste je lahko smeti, zbrane v Javi, če se referenca v programu ne uporablja več.

Najprej se naučimo ustvariti šibek zemljevid. Nato bomo izvedeli, kako se razlikuje od hashmapa.

Ustvari WeakHashMap

Če želite ustvariti šibek hashmap, moramo najprej uvoziti java.util.WeakHashMappaket. Ko uvozimo paket, tukaj je opisano, kako lahko v Javi ustvarimo šibke hashmape.

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

V zgornji kodi smo ustvarili šibek hashmap z imenom številke.

Tukaj,

  • Ključ - enolični identifikator, ki se uporablja za povezovanje vsakega elementa (vrednosti) na zemljevidu
  • Vrednost - elementi, povezani s ključi na zemljevidu

Upoštevajte del new WeakHashMap(8, 0.6). Tu je prvi parameter zmogljivost, drugi pa loadFactor .

  • zmogljivost - Kapaciteta te karte je 8. Kar pomeni, da lahko shrani 8 vnosov.
  • loadFactor - Faktor obremenitve tega zemljevida je 0,6. To pomeni, da se vsakič, ko je naša hash tabela zapolnjena za 60%, vnosi premaknejo v novo hash tabelo dvojne velikosti prvotne hash tabele.

Privzeta zmogljivost in faktor obremenitve

Lahko ustvarite šibek hashmap, ne da bi opredelili njegovo zmogljivost in faktor obremenitve. Na primer

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

Privzeto,

  • zmogljivost zemljevida bo 16
  • faktor obremenitve bo 0,75

Razlike med HashMap in WeakHashMap

Oglejmo si izvajanje šibkega hashmapa v Javi.

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

Izhod

 WeakHashMap: (Four = 4, Two = 2) WeakHashMap po odvozu smeti: (Four) 

Kot lahko vidimo, ko sta dva ključa šibkega hashmapa nastavljena na nullin izvajata zbiranje smeti, se ključ odstrani.

To je zato, ker so za razliko od hashmaps ključi šibkih hashmaps šibkega referenčnega tipa. To pomeni, da zbiralnik smeti odstrani vnos zemljevida, če se ključ tega vnosa ne uporablja več. To je koristno za prihranek virov.

Zdaj pa si oglejmo isto izvedbo v hashmapu.

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

Izhod

 HashMap: (Four = 4, Two = 2) HashMap po zbiranju smeti: (Four = 4, Two = 2) 

Tukaj, ko sta dva ključa hashmapa nastavljena nullin izvajata zbiranje smeti, ključ ni odstranjen.

To je zato, ker so za razliko od šibkih hashmaps ključi hashmaps močnega referenčnega tipa. To pomeni, da zbiralnik smeti ne odstrani vnosa zemljevida, čeprav ključ tega vnosa ni več uporabljen.

Opomba : Vse funkcionalnosti hashmapov in šibkih hashmaps so podobne, le da so ključi šibkega hashmapa šibko referenčni, medtem ko so ključi hashmapa močno referenčni.

Ustvarjanje WeakHashMap iz drugih zemljevidov

Tukaj je opisano, kako lahko na drugih zemljevidih ​​ustvarimo šibek hashmap.

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

Izhod

 HashMap: (Two = 2) WeakHashMap: (Two = 2) 

Metode WeakHashMap

WeakHashMapRazred določa metode, ki nam omogočajo, da opravljajo različne dejavnosti na zemljevidu.

Vstavite elemente v WeakHashMap

  • put() - na zemljevid vstavi določeno preslikavo ključa / vrednosti
  • putAll() - na ta zemljevid vstavi vse vnose z določenega zemljevida
  • putIfAbsent() - na zemljevid vstavi določeno preslikavo ključa / vrednosti, če določeni ključ ni prisoten na zemljevidu

Na primer

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

Izhod

 WeakHashMap parnih števil: (Four = 4, Two = 2) WeakHashMap števil:: Two = 2, Four = 4, One = 1) 

Dostopite do elementov 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: (Two = 2, One = 1) Odstranjena vrednost: 2 Ali je vnos (One = 3) odstranjen? Napačno posodobljen WeakHashMap: (One = 1)

Druge metode WeakHashMap

Metoda Opis
clear() Odstrani vse vnose s zemljevida
containsKey() Preveri, ali zemljevid vsebuje navedeni ključ in vrne logično vrednost
containsValue() Preveri, ali zemljevid vsebuje določeno vrednost in vrne logično vrednost
size() Vrne velikost zemljevida
isEmpty() Preveri, ali je zemljevid prazen, in vrne logično vrednost

Če želite izvedeti več, obiščite Java WeakHashMap (uradna dokumentacija Java).

Zanimive Članki...