Java WeakHashMap

Dalam tutorial ini, kita akan belajar tentang Java WeakHashMap dan operasinya dengan bantuan contoh. Kami juga akan belajar tentang perbedaan antara WeakHashMap dan HashMap

The WeakHashMapkelas dari koleksi kerangka Java menyediakan fitur dari struktur data tabel hash …

Ini mengimplementasikan antarmuka Peta.

Catatan : Kunci dari hashmap yang lemah adalah tipe WeakReference .

Objek dengan tipe referensi lemah bisa menjadi sampah yang dikumpulkan di Java jika referensi tidak lagi digunakan dalam program.

Mari kita belajar membuat peta hash yang lemah terlebih dahulu. Kemudian, kita akan mempelajari perbedaannya dengan hashmap.

Buat WeakHashMap

Untuk membuat hashmap yang lemah, kita harus mengimpor java.util.WeakHashMappaketnya terlebih dahulu. Setelah kami mengimpor paket, berikut adalah cara membuat hashmaps yang lemah di Java.

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

Pada kode di atas, kami telah membuat hashmap lemah bernama angka.

Sini,

  • Kunci - pengenal unik yang digunakan untuk mengaitkan setiap elemen (nilai) di peta
  • Nilai - elemen yang terkait dengan kunci di peta

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

  • kapasitas - Kapasitas peta ini adalah 8. Artinya, dapat menyimpan 8 entri.
  • loadFactor - Faktor beban peta ini adalah 0,6. Ini berarti setiap kali tabel hash kita terisi 60%, entri dipindahkan ke tabel hash baru dua kali lipat ukuran tabel hash asli.

Kapasitas default dan faktor beban

Anda dapat membuat hashmap yang lemah tanpa menentukan kapasitas dan faktor muatnya. Sebagai contoh,

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

Secara default,

  • kapasitas peta akan menjadi 16
  • faktor beban akan menjadi 0,75

Perbedaan Antara HashMap dan WeakHashMap

Mari kita lihat implementasi dari 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); ) ) 

Keluaran

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

Seperti yang bisa kita lihat, ketika dua kunci dari hashmap yang lemah disetel ke nulldan melakukan pengumpulan sampah, kuncinya akan dihapus.

Itu karena tidak seperti hashmaps, kunci dari hashmaps yang lemah memiliki tipe referensi yang lemah . Ini berarti entri peta dihapus oleh pengumpul sampah jika kunci entri itu tidak lagi digunakan. Ini berguna untuk menghemat sumber daya.

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

Keluaran

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

Di sini, ketika dua kunci dari hashmap diatur ke nulldan melakukan pengumpulan sampah, kuncinya tidak dihapus.

Ini karena tidak seperti kunci hashmaps yang lemah dari hashmaps memiliki tipe referensi yang kuat . Ini berarti entri peta tidak dihapus oleh pengumpul sampah meskipun kunci entri tersebut tidak lagi digunakan.

Catatan : Semua fungsi hashmap dan hashmap lemah serupa kecuali kunci dari hashmap yang lemah memiliki referensi yang lemah, sedangkan kunci dari hashmap memiliki referensi yang kuat.

Membuat WeakHashMap dari Peta Lain

Berikut adalah cara 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); ) ) 

Keluaran

 HashMap: (Dua = 2) WeakHashMap: (Dua = 2) 

Metode WeakHashMap

The WeakHashMapkelas menyediakan metode yang memungkinkan kita untuk melakukan berbagai operasi pada peta.

Sisipkan Elemen ke WeakHashMap

  • put() - menyisipkan pemetaan kunci / nilai yang ditentukan ke peta
  • putAll() - memasukkan semua entri dari peta tertentu ke peta ini
  • putIfAbsent() - menyisipkan pemetaan kunci / nilai yang ditentukan ke peta jika kunci yang ditentukan tidak ada di 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); ) ) 

Keluaran

 WeakHashMap angka genap: (Empat = 4, Dua = 2) WeakHashMap angka: (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 dihapus: 2 Apakah entri (Satu = 3) dihapus? Salah Diperbarui WeakHashMap: (Satu = 1)

Metode Lain dari WeakHashMap

metode Deskripsi
clear() Menghapus semua entri dari peta
containsKey() Memeriksa apakah peta berisi kunci yang ditentukan dan mengembalikan nilai boolean
containsValue() Memeriksa apakah peta berisi nilai yang ditentukan dan mengembalikan nilai boolean
size() Mengembalikan ukuran peta
isEmpty() Memeriksa apakah peta kosong dan mengembalikan nilai boolean

Untuk mempelajari lebih lanjut, kunjungi Java WeakHashMap (dokumentasi resmi Java).

Artikel yang menarik...