Java WeakHashMap

I denne opplæringen vil vi lære om Java WeakHashMap og dens operasjoner ved hjelp av eksempler. Vi vil også lære om forskjellene mellom WeakHashMap og HashMap

Den WeakHashMapklassen av Java samlinger rammeverket gir funksjonen av hash table datastruktur …

Den implementerer Map-grensesnittet.

Merk : Tastene til den svake hashmappen er av typen WeakReference .

Gjenstanden til en svak referansetype kan samles i søppel i Java hvis referansen ikke lenger brukes i programmet.

La oss lære å lage et svakt hash-kart først. Deretter vil vi lære hvordan det skiller seg fra en hashmap.

Lag et WeakHashMap

For å skape en svak hashmap, må vi først importere java.util.WeakHashMappakken. Når vi først har importert pakken, kan du lage svake hashmaps i Java.

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

I koden ovenfor har vi opprettet en svak hashmap med navn.

Her,

  • Nøkkel - en unik identifikator som brukes til å knytte hvert element (verdi) til et kart
  • Verdi - elementer tilknyttet nøkler i et kart

Legg merke til delen new WeakHashMap(8, 0.6). Her er den første parameteren kapasitet og den andre parameteren loadFactor .

  • kapasitet - Kapasiteten til dette kartet er 8. Det betyr at det kan lagre 8 oppføringer.
  • loadFactor - Lastfaktoren på dette kartet er 0,6. Dette betyr at når hasjtabellen vår fylles med 60%, flyttes oppføringene til en ny hashtabell som er dobbelt så stor som den opprinnelige hashtabellen.

Standard kapasitet og lastfaktor

Det er mulig å lage en svak hashmap uten å definere kapasitet og lastfaktor. For eksempel,

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

Som standard

  • kapasiteten til kartet vil være 16
  • lastfaktoren vil være 0,75

Forskjeller mellom HashMap og WeakHashMap

La oss se implementeringen av en svak hashmap i Java.

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

Produksjon

 WeakHashMap: (Fire = 4, To = 2) WeakHashMap etter søppeloppsamling: (Fire) 

Som vi kan se, når nøkkel to til en svak hashmap er satt til nullog utfører søppeloppsamling , blir nøkkelen fjernet.

Det er fordi i motsetning til hashmaps, er nøkler til svake hashmaps av svak referansetype . Dette betyr at inntasting av et kart fjernes av søppeloppsamleren hvis nøkkelen til oppføringen ikke lenger brukes. Dette er nyttig for å spare ressurser.

La oss nå se den samme implementeringen i et hashmap.

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

Produksjon

 HashMap: (Fire = 4, To = 2) HashMap etter søppeloppsamling: (Fire = 4, To = 2) 

Her, når nøkkelen to til hashmap er satt til nullog utfører søppeloppsamling , blir ikke nøkkelen fjernet.

Dette skyldes at i motsetning til svake hashmaps er nøkler til hashmaps av sterk referansetype . Dette betyr at oppføringen av et kart ikke fjernes av søppeloppsamleren, selv om nøkkelen til oppføringen ikke lenger brukes.

Merk : Alle funksjonene til hashmaps og svake hashmaps er like, bortsett fra at tastene til en svak hashmap har svak referanse, mens tastene til en hashmap har sterk referanse.

Opprette WeakHashMap fra andre kart

Slik kan vi lage en svak hashmap fra andre kart.

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

Produksjon

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

Metoder for WeakHashMap

Den WeakHashMapklassen inneholder metoder som tillater oss å utføre ulike operasjoner på kartet.

Sett inn elementer i WeakHashMap

  • put() - setter inn den spesifiserte nøkkel- / verdikartleggingen på kartet
  • putAll() - setter inn alle oppføringene fra spesifisert kart til dette kartet
  • putIfAbsent() - setter inn den angitte nøkkel- / verdikartleggingen på kartet hvis den angitte nøkkelen ikke er til stede på kartet

For eksempel,

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

Produksjon

 WeakHashMap av like tall: (Fire = 4, To = 2) WeakHashMap av tall: (To = 2, Fire = 4, En = 1) 

Få tilgang til WeakHashMap Elements

1. Bruke entrySet (), keySet () og verdier ()

  • entrySet() - returnerer et sett med all nøkkel- / verdikartlegging av kartet
  • keySet() - returnerer et sett med alle tastene på kartet
  • values() - returnerer et sett med alle verdiene på kartet

For eksempel,

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

Produksjon

 WeakHashMap: (Two = 2, One = 1) Key / Value mappings: (Two = 2, One = 1) Keys: (Two, One) Verdier: (1, 2) 

2. Bruke get () og getOrDefault ()

  • get()- Returnerer verdien som er knyttet til den angitte nøkkelen. Returnerer nullhvis nøkkelen ikke blir funnet.
  • getOrDefault()- Returnerer verdien som er knyttet til den angitte nøkkelen. Returnerer den angitte standardverdien hvis nøkkelen ikke blir funnet.

For eksempel,

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

Produksjon

 WeakHashMap: (To = 2, En = 1) Bruke get (): 2 Bruke getOrDefault (): 4 

Fjern WeakHashMap Elements

  • remove(key) - returnerer og fjerner oppføringen tilknyttet den angitte nøkkelen fra kartet
  • remove(key, value) - fjerner bare oppføringen fra kartet hvis den spesifiserte nøkkelen tilordnes til den angitte verdien og returnerer en boolsk verdi

For eksempel,

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

Produksjon

WeakHashMap: (Two = 2, One = 1) Fjernet verdi: 2 Er oppføringen (One = 3) fjernet? Falske oppdaterte WeakHashMap: (One = 1)

Andre metoder for WeakHashMap

Metode Beskrivelse
clear() Fjerner alle oppføringene fra kartet
containsKey() Sjekker om kartet inneholder den angitte nøkkelen og returnerer en boolsk verdi
containsValue() Sjekker om kartet inneholder den angitte verdien og returnerer en boolsk verdi
size() Returnerer størrelsen på kartet
isEmpty() Sjekker om kartet er tomt og returnerer en boolsk verdi

For å lære mer, besøk Java WeakHashMap (offisiell Java-dokumentasjon).

Interessante artikler...