Peta Lemah Java

Dalam tutorial ini, kita akan belajar mengenai Java WeakHashMap dan operasinya dengan bantuan contoh. Kami juga akan mengetahui perbezaan antara WeakHashMap dan HashMap

The WeakHashMapkelas rangka koleksi Java menyediakan ciri-ciri struktur data jadual hash …

Ia melaksanakan antara muka Peta.

Catatan : Kunci hashmap yang lemah adalah jenis WeakReference .

Objek jenis rujukan yang lemah boleh menjadi sampah yang dikumpulkan di Java jika rujukan tersebut tidak lagi digunakan dalam program.

Mari kita belajar membuat peta hash yang lemah terlebih dahulu. Kemudian, kita akan belajar bagaimana ia berbeza dengan hashmap.

Buat Peta WeakHash

Untuk membuat hashmap yang lemah, kita mesti mengimport java.util.WeakHashMappakej terlebih dahulu. Setelah kami mengimport pakej, berikut adalah bagaimana kita dapat membuat hashmap yang lemah di Java.

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

Dalam kod di atas, kami telah membuat hashmap yang lemah bernama nombor.

Di sini,

  • Kunci - pengecam unik yang digunakan untuk mengaitkan setiap elemen (nilai) dalam peta
  • Nilai - elemen yang berkaitan dengan kunci dalam peta

Perhatikan bahagiannya new WeakHashMap(8, 0.6). Di sini, parameter pertama adalah kapasiti dan parameter kedua adalah loadFactor .

  • kapasiti - Kapasiti peta ini adalah 8. Maksudnya, ia dapat menyimpan 8 entri.
  • loadFactor - Faktor beban peta ini ialah 0.6. Ini bermaksud setiap kali jadual hash kami diisi sebanyak 60%, entri dipindahkan ke jadual hash baru dua kali ganda dari ukuran jadual hash asal.

Kapasiti lalai dan faktor beban

Adalah mungkin untuk membuat hashmap yang lemah tanpa menentukan kapasiti dan faktor muatannya. Sebagai contoh,

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

Secara lalai,

  • kapasiti peta akan menjadi 16
  • faktor beban akan menjadi 0.75

Perbezaan Antara HashMap dan WeakHashMap

Mari kita lihat pelaksanaan hashmap yang lemah di 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); ) ) 

Pengeluaran

 WeakHashMap: (Empat = 4, Dua = 2) WeakHashMap selepas pengumpulan sampah: (Empat) 

Seperti yang dapat kita lihat, ketika kunci dua dari hashmap yang lemah diset ke nulldan melakukan pengumpulan sampah, kuncinya dikeluarkan.

Ini kerana tidak seperti hashmaps, kunci hashmaps yang lemah adalah jenis rujukan yang lemah . Ini bermaksud kemasukan peta dikeluarkan oleh pengumpul sampah sekiranya kunci entri tersebut tidak lagi digunakan. Ini berguna untuk menjimatkan sumber.

Sekarang mari kita lihat pelaksanaan yang sama dalam 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); ) ) 

Pengeluaran

 HashMap: (Empat = 4, Dua = 2) HashMap selepas pengumpulan sampah: (Empat = 4, Dua = 2) 

Di sini, apabila kunci dua hashmap ditetapkan nulldan melakukan pengumpulan sampah, kuncinya tidak dikeluarkan.

Ini kerana tidak seperti kunci hashmaps yang lemah dari hashmaps adalah jenis rujukan yang kuat . Ini bermaksud kemasukan peta tidak dikeluarkan oleh pengumpul sampah walaupun kunci untuk masuk itu tidak lagi digunakan.

Catatan : Semua fungsi hashmap dan hashmap lemah adalah serupa kecuali kunci hashmap yang lemah adalah rujukan yang lemah, sedangkan kunci hashmap adalah rujukan kuat.

Membuat WeakHashMap dari Peta Lain

Inilah cara kita dapat membuat hashmap yang lemah dari peta lain.

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

Pengeluaran

 HashMap: (Two = 2) WeashHashMap: (Two = 2) 

Kaedah WeakHashMap

The WeakHashMapkelas menyediakan kaedah yang membolehkan kita untuk melakukan pelbagai operasi di atas peta.

Masukkan Elemen ke WeakHashMap

  • put() - memasukkan pemetaan kunci / nilai yang ditentukan ke peta
  • putAll() - memasukkan semua entri dari peta yang ditentukan ke peta ini
  • putIfAbsent() - memasukkan pemetaan kunci / nilai yang ditentukan ke peta jika kunci yang ditentukan tidak terdapat dalam peta

Sebagai contoh,

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

Pengeluaran

 WeakHashMap nombor genap: (Empat = 4, Dua = 2) WeakHashMap nombor: (Dua = 2, Empat = 4, Satu = 1) 

Akses Elemen WeakHashMap

1. Using entrySet(), keySet() and values()

  • entrySet() - returns a set of all the key/value mapping of the map
  • keySet() - returns a set of all the keys of the map
  • values() - 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. Returns null 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 map
  • remove(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: (Dua = 2, Satu = 1) Nilai yang dikeluarkan: 2 Adakah entri (Satu = 3) dikeluarkan? Peta Lemah Lemah yang Dikemaskini: (Satu = 1)

Kaedah lain dari WeakHashMap

Kaedah Penerangan
clear() Membuang semua entri dari peta
containsKey() Memeriksa apakah peta mengandungi kunci yang ditentukan dan mengembalikan nilai boolean
containsValue() Memeriksa apakah peta mengandungi nilai yang ditentukan dan mengembalikan nilai boolean
size() Mengembalikan ukuran peta
isEmpty() Memeriksa apakah peta kosong dan mengembalikan nilai boolean

Untuk mengetahui lebih lanjut, lawati Java WeakHashMap (dokumentasi Java rasmi).

Artikel menarik...