Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> java

Java WeakHashMap – Memahami, Penggunaan, dan Perbedaan Kunci

Java WeakHashMap

Panduan lengkap tentang WeakHashMap Java, mencakup pembuatannya, perbedaan kunci dari HashMap, contoh praktis, dan metode penting.

Kelas WeakHashMap adalah bagian dari Java Collections Framework dan mengimplementasikan antarmuka Map. Ia berperilaku seperti tabel hash biasa tetapi menyimpan kunci sebagai referensi lemah, yang memungkinkannya untuk direklamasi oleh pengumpul sampah ketika tidak lagi digunakan.

Java WeakHashMap – Memahami, Penggunaan, dan Perbedaan Kunci

Catatan: Kunci dalam WeakHashMap dibungkus dalam objek WeakReference.

Referensi lemah dapat direklamasi oleh pengumpul sampah jika program tidak lagi memegang referensi kuat ke objek kunci.


Membuat WeakHashMap

Pertama, impor java.util.WeakHashMap:

import java.util.WeakHashMap; 

Kemudian buat instance, secara opsional menentukan kapasitas awal dan faktor beban:

// WeakHashMap with a capacity of 8 and a load factor of 0.6 WeakHashMap<Key, Value> numbers = new WeakHashMap<>(8, 0.6); 

Parameter:

Ketika tidak ada parameter yang diberikan, nilai default akan berlaku:

WeakHashMap<Key, Value> numbers = new WeakHashMap<>(); 

HashMap vs. WeakHashMap

Meskipun keduanya mengimplementasikan Map, perbedaan utama terletak pada kekuatan referensi:

Contoh yang menunjukkan perilaku:

import java.util.WeakHashMap; class Main { public static void main(String[] args) { WeakHashMap<String, Integer> numbers = new WeakHashMap<>(); String two = new String("Two"); Integer twoValue = 2; String four = new String("Four"); Integer fourValue = 4; numbers.put(two, twoValue); numbers.put(four, fourValue); System.out.println("WeakHashMap: " + numbers); // Nullify the reference to the key two = null; System.gc(); System.out.println("WeakHashMap after GC: " + numbers); } } 

Output:

WeakHashMap: {Four=4, Two=2} WeakHashMap after GC: {Four=4}

Entri untuk "Two" menghilang karena kunci tidak lagi dapat dijangkau secara kuat. Sebaliknya, HashMap akan mempertahankan entri:

import java.util.HashMap; class Main { public static void main(String[] args) { HashMap<String, Integer> numbers = new HashMap<>(); String two = new String("Two"); Integer twoValue = 2; String four = new String("Four"); Integer fourValue = 4; numbers.put(two, twoValue); numbers.put(four, fourValue); System.out.println("HashMap: " + numbers); two = null; System.gc(); System.out.println("HashMap after GC: " + numbers); } } 

Output:

HashMap: {Four=4, Two=2} HashMap after GC: {Four=4, Two=2}

Jadi, WeakHashMap ideal ketika Anda ingin map secara otomatis melepaskan memori yang terkait dengan kunci yang tidak digunakan.


Mengonversi dari Map Lain

Buat instance WeakHashMap dari map yang ada untuk menyalin entri:

import java.util.HashMap; import java.util.WeakHashMap; class Main { public static void main(String[] args) { HashMap<String, Integer> evenNumbers = new HashMap<>(); String two = new String("Two"); evenNumbers.put(two, 2); System.out.println("HashMap: " + evenNumbers); WeakHashMap<String, Integer> numbers = new WeakHashMap<>(evenNumbers); System.out.println("WeakHashMap: " + numbers); } } 

Output:

HashMap: {Two=2} WeakHashMap: {Two=2}

Metode Utama WeakHashMap

Berikut adalah pilihan operasi yang paling sering digunakan.

Menyisipkan Entri

Contoh:

import java.util.WeakHashMap; class Main { public static void main(String[] args) { WeakHashMap<String, Integer> evenNumbers = new WeakHashMap<>(); evenNumbers.put(new String("Two"), 2); evenNumbers.putIfAbsent(new String("Four"), 4); System.out.println("Even numbers: " + evenNumbers); WeakHashMap<String, Integer> numbers = new WeakHashMap<>(); numbers.put(new String("One"), 1); numbers.putAll(evenNumbers); System.out.println("All numbers: " + numbers); } } 

Output:

Even numbers: {Four=4, Two=2} All numbers: {Two=2, Four=4, One=1}

Mengakses Entri

Ambil data melalui:

Contoh:

import java.util.WeakHashMap; class Main { public static void main(String[] args) { WeakHashMap<String, Integer> numbers = new WeakHashMap<>(); numbers.put(new String("One"), 1); numbers.put(new String("Two"), 2); System.out.println("Map: " + numbers); System.out.println("Entry set: " + numbers.entrySet()); System.out.println("Keys: " + numbers.keySet()); System.out.println("Values: " + numbers.values()); System.out.println("Get Two: " + numbers.get("Two")); System.out.println("GetOrDefault Four: " + numbers.getOrDefault("Four", 4)); } } 

Output:

Map: {Two=2, One=1} Entry set: [Two=2, One=1] Keys: [Two, One] Values: [1, 2] Get Two: 2 GetOrDefault Four: 4

Menghapus Entri

Contoh:

import java.util.WeakHashMap; class Main { public static void main(String[] args) { WeakHashMap<String, Integer> numbers = new WeakHashMap<>(); numbers.put(new String("One"), 1); numbers.put(new String("Two"), 2); System.out.println("Map: " + numbers); int removed = numbers.remove("Two"); System.out.println("Removed value: " + removed); boolean removedIf = numbers.remove("One", 3); System.out.println("Removed {One=3}? " + removedIf); System.out.println("After removal: " + numbers); } } 

Output:

Map: {Two=2, One=1} Removed value: 2 Removed {One=3}? false After removal: {One=1}

Utilitas Tambahan

MetodeDeskripsi
clear()Menghapus semua entri.
containsKey(key)Memeriksa apakah kunci ada.
containsValue(value)Memeriksa apakah nilai ada.
size()Mengembalikan jumlah entri.
isEmpty()Mengembalikan true jika map tidak memiliki entri.

Untuk mendalami lebih jauh, lihat dokumentasi WeakHashMap Java resmi.


java

  1. Menguasai Operator Java: Tipe, Sintaks, & Contoh Praktis
  2. Komentar Java: Tipe, Penggunaan, dan Best Practices
  3. Menguasai Java Enhanced For Loop: Sintaks, Contoh, dan Best Practices
  4. Menguasai String Java: Pembuatan, Metode, dan Best Practices
  5. Menguasai Antarmuka Java: Konsep, Implementasi, dan Praktik Terbaik
  6. Menguasai Kelas Dalam Anonim Java: Definisi, Sintaks, dan Contoh Praktis
  7. Menguasai Java Try-with-Resources: Manajemen Sumber Daya Otomatis Dijelaskan
  8. Anotasi Java Dijelaskan: Jenis, Penempatan, dan Contoh Praktis
  9. Pernyataan Java: Panduan Praktis untuk Mendeteksi Bug dan Memastikan Keandalan Kode
  10. Memahami Java Vector: Penggunaan, Fitur, dan Perbandingan dengan ArrayList