Java WeakHashMap

Selles õpetuses õpime näidete abil Java WeakHashMapi ja selle toimingute kohta. Samuti õpime tundma WeakHashMapi ja HashMapi erinevusi

WeakHashMapKlassi 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.WeakHashMapesmalt 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, nulleemaldatakse 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 nullprü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

WeakHashMapKlassi ette meetodid, mis võimaldavad meil sooritada erinevaid toiminguid kaardil.

Sisestage elemendid WeakHashMap-i

  • put() - sisestab kaardile määratud võtme / väärtuse kaardistamise
  • putAll() - lisab sellele kaardile kõik kirjed määratud kaardilt
  • putIfAbsent() - 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 komplekti
  • keySet() - tagastab kaardi kõigi võtmete komplekti
  • values() - 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, nullkui 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 kirje
  • remove(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).

Huvitavad Artiklid...