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 WeakHashMap
kelas 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.WeakHashMap
paketnya 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 null
dan 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 null
dan 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 WeakHashMap
kelas menyediakan metode yang memungkinkan kita untuk melakukan berbagai operasi pada peta.
Sisipkan Elemen ke WeakHashMap
put()
- menyisipkan pemetaan kunci / nilai yang ditentukan ke petaputAll()
- memasukkan semua entri dari peta tertentu ke peta iniputIfAbsent()
- 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 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: (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).