Selles õpetuses õpime näidete abil Java WeakHashMapi ja selle toimingute kohta. Samuti õpime tundma WeakHashMapi ja HashMapi erinevusi
WeakHashMap
Klassi Java kogud raamistik annab tunnuseks hash tabeli andmed struktuuri …
See rakendab Mapi liidest.
Märkus . Nõrga hashmapi võtmed on tüüpi WeakReference .
Nõrga viitetüübi objektiks võib olla Java-sse kogutud prügi, kui viidet programmis enam ei kasutata.
Õpigem kõigepealt luua nõrk räsi kaart. Seejärel õpime, kuidas see erineb hashmapist.
Looge WeakHashMap
Nõrga hashmapi loomiseks peame java.util.WeakHashMap
esmalt pakendi importima . Kui pakett on imporditud, saate Java-s luua nõrgad hashmapid siin.
//WeakHashMap creation with capacity 8 and load factor 0.6 WeakHashMap numbers = new WeakHashMap(8, 0.6);
Ülaltoodud koodis oleme loonud nõrga hashmapi nimega numbrid.
Siin,
- Võti - kordumatu identifikaator, mida kasutatakse iga elemendi (väärtuse) seostamiseks kaardil
- Väärtus - kaardil klahvidega seotud elemendid
Märka osa new WeakHashMap(8, 0.6)
. Siin on esimene parameeter võimsus ja teine parameeter loadFactor .
- maht - selle kaardi maht on 8. See tähendab, et see võib salvestada 8 kirjet.
- loadFactor - selle kaardi koormustegur on 0,6. See tähendab, et alati, kui meie räsitabel on täidetud 60%, teisaldatakse kanded uude räsitabelisse, mis on topelt suurem kui algne räsitabel.
Vaikimisi maht ja koormustegur
Nõrka hashmapi on võimalik luua ilma selle võimsust ja koormustegurit määramata. Näiteks,
// WeakHashMap with default capacity and load factor WeakHashMap numbers1 = new WeakHashMap();
Vaikimisi,
- kaardi maht on 16
- koormustegur on 0,75
Erinevused HashMapi ja WeakHashMapi vahel
Vaatame Java-s nõrga hashmapi rakendamist.
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); ) )
Väljund
WeakHashMap: (neli = 4, kaks = 2) WeakHashMap pärast prügivedu: (neli)
Nagu näeme, null
eemaldatakse võti, kui nõrga hashmi teine võti on seatud prügivedu teostama.
On sest erinevalt hashmaps, võtmed nõrk hashmaps on nõrk viide tüüpi. See tähendab, et prügivedaja eemaldab kaardi sisestuse, kui selle kirje võtit enam ei kasutata. See on kasulik ressursside säästmiseks.
Vaatame nüüd sama rakendust räsipildis.
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); ) )
Väljund
HashMap: (neli = 4, kaks = 2) HashMap pärast prügivedu: (neli = 4, kaks = 2)
Siin, kui hashmapi teine võti on seatud null
prügivedu teostama, võtit ei eemaldata.
Selle põhjuseks on asjaolu, et erinevalt nõrkadest hashmaps-võtmetest on hashmapide võtmed tugeva viite tüüpi. See tähendab, et prügivedaja ei eemalda kaardi sisestust, kuigi selle kirje võtit enam ei kasutata.
Märkus : kõik hashmafide ja nõrkade hashappide funktsioonid on sarnased, välja arvatud juhul, kui nõrga hashmapi klahvid on nõrgad, samas kui hashmapi klahvid on tugevad.
WeakHashMapi loomine teistest kaartidest
Siit saate teada, kuidas teistelt kaartidelt nõrga hashmi luua.
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); ) )
Väljund
HashMap: (kaks = 2) WeakHashMap: (kaks = 2)
WeakHashMapi meetodid
WeakHashMap
Klassi ette meetodid, mis võimaldavad meil sooritada erinevaid toiminguid kaardil.
Sisestage elemendid WeakHashMap-i
put()
- sisestab kaardile määratud võtme / väärtuse kaardistamiseputAll()
- lisab sellele kaardile kõik kirjed määratud kaardiltputIfAbsent()
- sisestab kaardile määratud võtme / väärtuse kaardistuse, kui määratud võtit kaardil pole
Näiteks,
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); ) )
Väljund
Paarisarvude WeakHashMap: (neli = 4, kaks = 2) WeakHashMap-arvude kaart: (kaks = 2, neli = 4, üks = 1)
Juurdepääs WeakHashMapi elementidele
1. Kasutades kirjetSet (), keySet () ja väärtusi ()
entrySet()
- tagastab kaardi kõigi võtmete / väärtuste kaardistamise komplektikeySet()
- tagastab kaardi kõigi võtmete komplektivalues()
- tagastab kaardi kõigi väärtuste hulga
Näiteks,
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()); ) )
Väljund
WeakHashMap: (kaks = 2, üks = 1) võtme / väärtuse kaardistamine: (kaks = 2, üks = 1) võtmed: (kaks, üks) väärtused: (1, 2)
2. get () ja getOrDefault () kasutamine
get()
- tagastab määratud võtmega seotud väärtuse. Tagastab,null
kui võtit ei leitud.getOrDefault()
- tagastab määratud võtmega seotud väärtuse. Tagastab määratud vaikeväärtuse, kui võtit ei leita.
Näiteks,
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); ) )
Väljund
WeakHashMap: (kaks = 2, üks = 1) get () kasutamine: 2 getOrDefault () kasutamine: 4
Eemaldage WeakHashMapi elemendid
remove(key)
- tagastab ja eemaldab kaardilt määratud võtmega seotud kirjeremove(key, value)
- eemaldab kirje kaardilt ainult siis, kui määratud võti on vastendatud määratud väärtusele ja tagastab tõeväärtuse
Näiteks,
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); ) )
Väljund
WeakHashMap: (kaks = 2, üks = 1) eemaldatud väärtus: 2 Kas kirje (üks = 3) on eemaldatud? Vale uuendatud WeakHashMap: (üks = 1)
Muud WeakHashMapi meetodid
Meetod | Kirjeldus |
---|---|
clear() | Eemaldab kaardilt kõik kirjed |
containsKey() | Kontrollib, kas kaart sisaldab määratud võtit ja tagastab tõeväärtuse |
containsValue() | Kontrollib, kas kaart sisaldab määratud väärtust ja tagastab tõeväärtuse |
size() | Tagastab kaardi suuruse |
isEmpty() | Kontrollib, kas kaart on tühi, ja tagastab tõeväärtuse |
Lisateabe saamiseks külastage Java WeakHashMap (ametlik Java dokumentatsioon).