WeakHashMap与HashMap的区别是什么?
WeakHashMap
和 HashMap
都是 Java 中的集合类,用于存储键值对,但它们在内存管理和垃圾回收方面有显著的区别。
键的引用类型:
内存管理:
使用场景:
import java.util.HashMap;
import java.util.WeakHashMap;
public class MapExample {
public static void main(String[] args) {
// 使用 HashMap
HashMap<String, String> hashMap = new HashMap<>();
String key1 = new String("key1");
hashMap.put(key1, "value1");
System.out.println("HashMap before GC: " + hashMap);
key1 = null; // 解除对 key1 的引用
System.gc(); // 请求垃圾回收
System.out.println("HashMap after GC: " + hashMap); // 仍然存在
// 使用 WeakHashMap
WeakHashMap<String, String> weakHashMap = new WeakHashMap<>();
String key2 = new String("key2");
weakHashMap.put(key2, "value2");
System.out.println("WeakHashMap before GC: " + weakHashMap);
key2 = null; // 解除对 key2 的引用
System.gc(); // 请求垃圾回收
System.out.println("WeakHashMap after GC: " + weakHashMap); // 可能被回收
}
}
HashMap
时,键的生命周期与 HashMap 的生命周期相同。WeakHashMap
时,键的生命周期是短暂的,适合用于缓存等场景,能够有效地释放内存。