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 WeakHashMap
klassen 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.WeakHashMap
pakken. 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 null
og 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 null
og 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 WeakHashMap
klassen 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å kartetputAll()
- setter inn alle oppføringene fra spesifisert kart til dette kartetputIfAbsent()
- 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 kartetkeySet()
- returnerer et sett med alle tastene på kartetvalues()
- 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. Returnerernull
hvis 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 kartetremove(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).