U ovom uputstvu uz primjere ćemo naučiti o Javi WeakHashMap i njezinim operacijama. Također ćemo naučiti o razlikama između WeakHashMap i HashMap
WeakHashMap
Klasa Java zbirki okvir daje obilježje strukture hash tablicu podataka …
Provodi sučelje Map.
Napomena : Tipke slabe hashmape tipa su WeakReference .
Objekt slabe referentne vrste može biti smeće prikupljeno u Javi ako se referenca više ne koristi u programu.
Naučimo prvo stvoriti slabu hash kartu. Zatim ćemo naučiti kako se razlikuje od hashmape.
Stvorite WeakHashMap
Da bismo stvorili slabu hashmapu, prvo moramo uvesti java.util.WeakHashMap
paket. Nakon što uvozimo paket, evo kako možemo stvoriti slabe hash-mape u Javi.
//WeakHashMap creation with capacity 8 and load factor 0.6 WeakHashMap numbers = new WeakHashMap(8, 0.6);
U gornjem kodu stvorili smo slabu hashmapu nazvanu brojevi.
Ovdje,
- Ključ - jedinstveni identifikator koji se koristi za povezivanje svakog elementa (vrijednosti) na karti
- Vrijednost - elementi pridruženi ključevima na karti
Primijetite dio new WeakHashMap(8, 0.6)
. Ovdje je prvi parametar kapacitet, a drugi parametar loadFactor .
- kapacitet - Kapacitet ove karte je 8. Što znači da može pohraniti 8 unosa.
- loadFactor - Faktor opterećenja ove karte je 0,6. To znači da kad god se naša hash tablica popuni za 60%, unosi se premještaju u novu hash tablicu dvostruke veličine izvorne hash tablice.
Zadani kapacitet i faktor opterećenja
Moguće je stvoriti slabu hashmapu bez definiranja njenog kapaciteta i faktora opterećenja. Na primjer,
// WeakHashMap with default capacity and load factor WeakHashMap numbers1 = new WeakHashMap();
Prema zadanim postavkama,
- kapacitet karte bit će 16
- faktor opterećenja iznosit će 0,75
Razlike između HashMap i WeakHashMap
Pogledajmo implementaciju slabe hashmape u 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); ) )
Izlaz
WeakHashMap: (Četiri = 4, Dvije = 2) WeakHashMap nakon odvoza smeća: (Četiri)
Kao što vidimo, kada se ključ dva slabog hashmapa postave null
i izvrše prikupljanje smeća, ključ se uklanja.
To je zato što su za razliku od hashmaps, tipke slabih hashmapa slabog referentnog tipa. To znači da sakupljač smeća uklanja unos karte ako se ključ tog unosa više ne koristi. Ovo je korisno za uštedu resursa.
Sada ćemo vidjeti istu implementaciju u hashmapi.
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); ) )
Izlaz
HashMap: (četiri = 4, dva = 2) HashMap nakon odvoza smeća: (četiri = 4, dva = 2)
Ovdje se, kada je ključ dva hashmapa postavljen na null
i vrši prikupljanje smeća, ključ ne uklanja.
To je zato što su za razliku od slabih hashmapova tipke hashmaps-a jakog referentnog tipa. To znači da sakupljač smeća ne uklanja unos karte iako se ključ tog unosa više ne koristi.
Napomena : Sve funkcionalnosti hashmapa i slabih hashmapa su slične, osim što su tipke slabog hashmapa slabe reference, dok su ključevi hashmape jake reference.
Stvaranje WeakHashMap-a na drugim kartama
Evo kako na drugim kartama možemo stvoriti slabu hashmapu.
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); ) )
Izlaz
HashMap: (Dvije = 2) WeakHashMap: (Dvije = 2)
Metode WeakHashMap
WeakHashMap
Klasa pruža metode koje omogućuju nam da obavljaju različite operacije na karti.
Umetnite elemente u WeakHashMap
put()
- na kartu ubacuje određeno mapiranje ključa / vrijednostiputAll()
- na ovu kartu ubacuje sve unose s određene karteputIfAbsent()
- ubacuje navedeno mapiranje ključa / vrijednosti na kartu ako navedeni ključ nije prisutan na karti
Na primjer,
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); ) )
Izlaz
WeakHashMap parnih brojeva: (Four = 4, Two = 2) WeakHashMap brojeva: (Two = 2, Four = 4, One = 1)
Pristupite elementima 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: (Dva = 2, Jedan = 1) Uklonjena vrijednost: 2 Je li unos (Jedan = 3) uklonjen? Lažno ažurirano WeakHashMap: (Jedan = 1)
Ostale metode WeakHashMap
Metoda | Opis |
---|---|
clear() | Uklanja sve unose s karte |
containsKey() | Provjerava sadrži li karta navedeni ključ i vraća logičku vrijednost |
containsValue() | Provjerava sadrži li karta navedenu vrijednost i vraća logičku vrijednost |
size() | Vraća veličinu karte |
isEmpty() | Provjerava je li karta prazna i vraća li logičku vrijednost |
Da biste saznali više, posjetite Java WeakHashMap (službena Java dokumentacija).