V tej vadnici bomo s pomočjo primerov spoznali Java WeakHashMap in njegovo delovanje. Spoznali bomo tudi razlike med WeakHashMap in HashMap
WeakHashMap
Razred 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.WeakHashMap
paket. 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 null
in 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 null
in 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
WeakHashMap
Razred 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 / vrednostiputAll()
- na ta zemljevid vstavi vse vnose z določenega zemljevidaputIfAbsent()
- 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 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: (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).