Java WeakHashMap

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

WeakHashMapKlasa 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.WeakHashMappaket. 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 nulli 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 nulli 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

WeakHashMapKlasa 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 / vrijednosti
  • putAll() - na ovu kartu ubacuje sve unose s određene karte
  • putIfAbsent() - 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 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, 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).

Zanimljivi članci...