原文: https://javatutorial.net/java-weakhashmap-example

Java 中的WeakHashMap实现了Map接口,并表示一个具有弱键的哈希表。 如果按键不是通常使用的,则将从地图中自动删除该条目。 这就是它与其他Map实现的区别。

Java `WeakHashMap`示例 - 图1

支持空值和非空值,并且在初始容量和负载因子方面,其性能类似于HashMap类。

默认情况下,此类不同步。

HashMapWeakHashMap之间的主要区别

  1. HashMap 具有强引用,而WeakHashMap具有弱引用
  2. HashMap在垃圾收集器中占主导地位。
  3. WeakHashMap类中没有clone()方法,因为它仅实现Map接口。

Java `WeakHashMap`示例 - 图2

WeakHashMap实现Map并扩展AbstractMap

WeakHashMap中的构造方法

  1. WeakHashMap():创建一个空的WeakHashMap,默认初始容量为 16,负载系数为 0.75。
  2. WeakHashMap(int initialCapacity):创建具有指定容量的空WeakHashMap
  3. WeakHashMap(int initialCapacity, float loadFactor):创建具有指定容量和负载因子的空WeakHashMap
  4. WeakHashMap(Map<? extends K, ? extends V> m):创建一个具有与指定映射相同的映射的新WeakHashMap

WeakHashMap中的方法

  1. void clear():从当前映射中删除所有映射。
  2. boolean containsKey(Object key):如果当前映射包含指定键的映射,则返回true
  3. boolean containsValue(Object value):如果当前映射中有映射到指定值的一个或多个键,则返回true
  4. V get(Object key):返回指定键所映射到的值;如果该映射不包含指定键的映射,则返回null
  5. boolean isEmpty():如果映射为空,则返回true,否则返回false
  6. V put(K key, V value):将指定值“放入”当前映射中的指定键。
  7. V remove(Object key):如果存在,则从此WeakHashMap中删除键的映射。
  8. int size():返回映射中的映射数。

有关所有方法的文档,请访问 Oracle 官方文档页面

一个执行上述某些方法的示例程序:

  1. // importing the necessary library which is under java.util.*
  2. import java.util.*;
  3. public class WeakHashMapExample
  4. {
  5. public static void main(String args[])throws Exception
  6. {
  7. // declaration of an instance of WeakHashMap that takes a number as a key and string as a value
  8. Map<Number, String> animals = new WeakHashMap<Number, String>();
  9. // populating the map
  10. animals.put(1, "Elephant");
  11. animals.put(2, "Tiger");
  12. animals.put(3, "Lion");
  13. // condition that checks for a certain value
  14. if(animals.containsValue("Tiger"))
  15. System.out.println("Tiger exists.");
  16. // condition that checks for a certain key
  17. if(animals.containsKey(3))
  18. System.out.println("'3' key exists.");
  19. // removing a specific key
  20. animals.remove(1);
  21. System.out.println(animals);
  22. // deletes all mappings
  23. animals.clear();
  24. // check if weakhashmap is empty
  25. if(animals.isEmpty())
  26. System.out.println(animals);
  27. }
  28. }

输出

  1. Tiger exists.
  2. '3' key exists.
  3. {3=Lion, 2=Tiger}
  4. {}