Tässä opetusohjelmassa opitaan Java WeakHashMapista ja sen toiminnoista esimerkkien avulla. Opimme myös WeakHashMapin ja HashMapin eroista
WeakHashMap
Luokka Java kokoelmien politiikalle piirre hajautustaulukossa tietorakenteen …
Se toteuttaa Map-käyttöliittymän.
Huomaa : Heikon hashmap-avaimet ovat WeakReference- tyyppiä.
Heikon viitetyypin kohde voi olla Java: ssa kerätty roska, jos viittausta ei enää käytetä ohjelmassa.
Oppikaamme ensin luomaan heikko hash-kartta. Sitten opimme, kuinka se eroaa hashmapista.
Luo WeakHashMap
Heikon hashmapin luomiseksi meidän on java.util.WeakHashMap
ensin tuotava paketti. Kun paketti on tuotu, voimme näin luoda heikkoja hashappeja Javalaan.
//WeakHashMap creation with capacity 8 and load factor 0.6 WeakHashMap numbers = new WeakHashMap(8, 0.6);
Yllä olevassa koodissa olemme luoneet heikon hashmap-nimisen numeron.
Tässä,
- Avain - yksilöllinen tunniste, jota käytetään kunkin elementin (arvon) liittämiseen karttaan
- Arvo - elementit, jotka on liitetty avaimiin kartalla
Huomaa osa new WeakHashMap(8, 0.6)
. Ensimmäinen parametri on kapasiteetti ja toinen parametri loadFactor .
- kapasiteetti - Tämän kartan kapasiteetti on 8. Tämä tarkoittaa, että se voi tallentaa 8 merkintää.
- loadFactor - Tämän kartan kuormituskerroin on 0,6. Tämä tarkoittaa sitä, että aina kun hajautustaulukomme täytetään 60%, merkinnät siirretään uuteen hajautustaulukkoon, joka on kaksinkertainen alkuperäisen hajataulukon kokoon nähden.
Oletuskapasiteetti ja kuormituskerroin
On mahdollista luoda heikko hashmap määrittelemättä sen kapasiteettia ja kuormituskerrointa. Esimerkiksi,
// WeakHashMap with default capacity and load factor WeakHashMap numbers1 = new WeakHashMap();
Oletuksena,
- kartan kapasiteetti on 16
- kuormituskerroin on 0,75
Erot HashMapin ja WeakHashMapin välillä
Katsotaanpa heikon hashmapin toteutus Java-sovelluksessa.
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); ) )
Tuotos
WeakHashMap: (Neljä = 4, Kaksi = 2) WeakHashMap roskien keräämisen jälkeen: (Neljä)
Kuten näemme, kun heikon hashapin avain kaksi asetetaan null
roskakoriin ja suoritetaan se, avain poistetaan.
Tämä johtuu siitä, että toisin kuin hashmaps, heikkojen hashmaps-näppäimien tyyppi on heikko . Tämä tarkoittaa, että roskien kerääjä poistaa kartan merkinnän, jos kyseisen merkinnän avainta ei enää käytetä. Tämä on hyödyllistä resurssien säästämiseksi.
Katsotaan nyt sama toteutus hashmapissa.
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); ) )
Tuotos
HashMap: (Neljä = 4, Kaksi = 2) HashMap roskien keräämisen jälkeen: (Neljä = 4, Kaksi = 2)
Täällä, kun hashmap-näppäimen kaksi avain asetetaan null
ja suoritetaan roskakoriin, avainta ei poisteta.
Tämä johtuu siitä, että toisin kuin heikot hashmaps-avaimet, hashmaps-näppäimet ovat vahvoja viitteitä . Tämä tarkoittaa, että roskien kerääjä ei poista kartan merkintää, vaikka kyseisen merkinnän avainta ei enää käytetä.
Huomaa : Kaikki hashmapsin ja heikkojen hashmapsin toiminnot ovat samanlaisia, paitsi että heikon hashmapin näppäimillä on heikko viittaus, kun taas hashmap-näppäimillä on vahva viite.
WeakHashMapin luominen muista kartoista
Näin voimme luoda heikon hashmapin muista kartoista.
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); ) )
Tuotos
HashMap: (Kaksi = 2) WeakHashMap: (Kaksi = 2)
WeakHashMap-menetelmät
WeakHashMap
Luokan tarjoaa menetelmiä, joiden avulla voimme suorittaa erilaisia toimenpiteitä kartalle.
Lisää elementit WeakHashMapiin
put()
- lisää määritetyn avaimen / arvon kartoituksen kartalleputAll()
- lisää kaikki määritetyn kartan merkinnät tähän karttaanputIfAbsent()
- lisää määritetyn avaimen / arvon kartoituksen, jos määritettyä avainta ei ole kartalla
Esimerkiksi,
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); ) )
Tuotos
Parillisten numeroiden WeakHash: (neljä = 4, kaksi = 2) WeakHashMap-numero: (kaksi = 2, neljä = 4, yksi = 1)
Käytä WeakHashMap-elementtejä
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: (Kaksi = 2, Yksi = 1) Poistettu arvo: 2 Onko merkintä (Yksi = 3) poistettu? Väärin päivitetty WeakHashMap: (Yksi = 1)
Muut WeakHashMap-menetelmät
Menetelmä | Kuvaus |
---|---|
clear() | Poistaa kaikki merkinnät kartalta |
containsKey() | Tarkistaa, sisältääkö kartta määritetyn avaimen ja palauttaa loogisen arvon |
containsValue() | Tarkistaa, sisältääkö kartta määritetyn arvon ja palauttaa loogisen arvon |
size() | Palauttaa kartan koon |
isEmpty() | Tarkistaa, onko kartta tyhjä, ja palauttaa loogisen arvon |
Lisätietoja on Java WeakHashMap -sivustossa (virallinen Java-dokumentaatio).