WeakHashMap是Map接口的实现。 WeakHashMap 几乎与 HashMap 相同,但在 WeakHashMap 的情况下,如果对象被指定为键不包含任何引用,则即使它与 WeakHashMap 关联,它也有资格进行垃圾回收。即垃圾Collector支配 WeakHashMap。
WeakHashMap 是 Map 接口的基于哈希表的实现,具有弱键。当 WeakHashMap 中的条目不再正常使用时,该条目将自动删除。更准确地说,给定键的映射的存在不会阻止该键被垃圾Collector丢弃,即使其可最终化、最终确定,然后回收。当一个键被丢弃时,它的条目实际上会从映射中删除,因此此类的行为与其他 Map 实现有些不同。
WeakHashMap 类的一些重要函数包括:
- WeakHashMap 中支持空值和空键。
- 它不同步。
- 此类主要用于关键对象,其 equals 方法使用 == 运算符测试对象标识。
Constructors in WeakHashMap
1. WeakHashMap():该构造函数用于创建一个空的WeakHashMap,默认初始容量为(16),负载系数为(0.75)。
2. WeakHashMap(int initialCapacity):该构造函数用于创建一个具有给定初始容量和默认负载因子(0.75)的空WeakHashMap。
3. WeakHashMap(int initialCapacity, float loadFactor):该构造函数用于创建一个具有给定初始容量和给定负载因子的空WeakHashMap。
4. WeakHashMap(Map m):该构造函数用于创建一个与指定映射具有相同映射关系的新WeakHashMap。
Methods in WeakHashMap
方法 | 执行的操作 |
---|---|
WeakHashMap clear() | 从此Map中删除所有映射。此调用返回后,Map将为空。 |
WeakHashMap containsValue() | 如果此映射将一个或多个键映射到指定值,则返回 true。 |
WeakHashMap containsKey() | 如果此映射包含指定键的映射,则返回 true。 |
WeakHashMap entrySet() | 返回此映射中包含的映射的集合视图。该集合由Map支持,因此对Map的更改会反映在集合中,反之亦然。如果在集合上的迭代正在进行时修改映射(除非通过迭代器自己的删除操作,或通过迭代器返回的映射条目上的 setValue 操作),则迭代的结果是未定义的。该集合支持元素删除,即通过 Iterator.remove、Set.remove、removeAll、retainAll 和clear 操作从映射中删除相应的映射。它不支持add或addAll操作。 |
WeakHashMap get() | 返回指定键映射到的值,如果此映射不包含该键的映射,则返回 null。 |
WeakHashMap isEmpty() | 如果此映射不包含键值映射,则返回 true。此结果是快照,可能不会反映未处理的条目,这些条目将在下次尝试访问之前删除,因为它们不再被引用。 |
WeakHashMap keySet() | 返回此映射中包含的键的集合视图。该集合由Map支持,因此对Map的更改会反映在集合中,反之亦然。如果在对集合进行迭代时修改映射(除非通过迭代器自己的删除操作),则迭代的结果是不确定的。该集合支持元素删除,即通过 Iterator.remove、Set.remove、removeAll、retainAll 和clear 操作从映射中删除相应的映射。它不支持add或addAll操作。 |
WeakHashMap put() | 将指定值与此映射中的指定键相关联。如果映射之前包含此键的映射,则旧值将被替换。 |
WeakHashMap putall() | 将指定映射中的所有映射复制到此映射。这些映射将替换该映射对当前位于指定映射中的任何键的任何映射。 |
WeakHashMap remove() | 从此弱哈希映射中删除键的映射(如果存在)。更正式地说,如果此映射包含从键 k 到值 v 的映射(key==null ? k==null: key.equals(k)),则删除该映射。 |
WeakHashMap size() | 返回此映射中键值映射的数量。此结果是快照,可能不会反映未处理的条目,这些条目将在下一次尝试访问之前被删除,因为它们不再被引用。 |
WeakHashMap values() | 返回此映射中包含的值的集合视图。该集合由Map支持,因此对Map的更改会反映在集合中,反之亦然。如果在对集合进行迭代时修改映射(除非通过迭代器自己的删除操作),则迭代的结果是不确定的。该集合支持元素删除,即通过 Iterator.remove、Collection.remove、removeAll、retainAll 和clear 操作从映射中删除相应的映射。它不支持add或addAll操作。 |
示例 1:
Java
// Java Program to Illustrate WeakHashMap class
// Via close(), containsValue(), containsKey()
// and isEmpty() method
// Importing required classes
import java.util.Map;
import java.util.WeakHashMap;
// Main class
// WeakHashMapdemo
class GFG {
// Main driver method
public static void main(String[] arg)
{
// Creating an empty WeakHashMap
// of Number and string type
Map<Number, String> weak
= new WeakHashMap<Number, String>();
// Inserting custom elements
// using put() method
weak.put(1, "geeks");
weak.put(2, "for");
weak.put(3, "geeks");
// Printing and alongside checking weak map
System.out.println("our weak map: " + weak);
// Checking if "for" exist
if (weak.containsValue("for"))
System.out.println("for exist");
// Checking if 1 exist as a key in Map
if (weak.containsKey(1))
System.out.println("1 exist");
// Removing all data
// using clear() method
weak.clear();
// Checking whether the Map is empty or not
// using isEmpty() method
if (weak.isEmpty())
// Display message for better readability
System.out.println("empty map: " + weak);
}
}
our weak map: {3=geeks, 2=for, 1=geeks} for exist 1 exist empty map: {}
示例 2:
Java
// Java Program to Illustrate WeakHashMap class
// Via entrySet(), keySet() and Values() Method
// Importing required classes
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.WeakHashMap;
// Main class
// WeakHashMapdemo
class GFG {
// Main driver method
public static void main(String[] arg)
{
// Creating an empty WeakHashMap
// of number and string type
Map<Number, String> weak
= new WeakHashMap<Number, String>();
// Inserting elements
// using put() method
weak.put(1, "geeks");
weak.put(2, "for");
weak.put(3, "geeks");
// Creating object of Set interface
Set set1 = weak.entrySet();
// Checking above Set
System.out.println(set1);
// Creating set for key
Set keySet = weak.keySet();
// Checking keySet
System.out.println("key set: " + keySet);
Collection value = weak.values();
// Checking values of map and printing them
System.out.println("values: " + value);
}
}
[3=geeks, 2=for, 1=geeks] key set: [3, 2, 1] values: [geeks, for, geeks]
示例 3:
Java
// Java code remove(), putAll()
// get() and size() method
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.WeakHashMap;
class WeakHashMapdemo {
public static void main(String[] arg)
{
Map<Number, String> weak
= new WeakHashMap<Number, String>();
weak.put(1, "geeks");
weak.put(2, "for");
weak.put(3, "geeks");
Map<Number, String> weak1
= new WeakHashMap<Number, String>();
weak1.putAll(weak);
// Getting value of key 2
System.out.println(weak1.get(2));
// Printing the size of map
// using size() method
System.out.println("Size of map is: "
+ weak1.size());
// Removing second element
// using standard remove() method
weak1.remove(2);
// Printing the size after removing key and value
// pair
System.out.println("Size after removing: "
+ weak1.size());
}
}
for Size of map is: 3 Size after removing: 2
相关用法
- Java WeakHashMap putAll()用法及代码示例
- Java WeakHashMap clear()用法及代码示例
- Java WeakHashMap containsKey()用法及代码示例
- Java WeakHashMap putall()用法及代码示例
- Java WeakHashMap size()用法及代码示例
- Java WeakHashMap containsValue()用法及代码示例
- Java WeakHashMap entrySet()用法及代码示例
- Java WeakHashMap get()用法及代码示例
- Java WeakHashMap isEmpty()用法及代码示例
- Java WeakHashMap keySet()用法及代码示例
- Java WeakHashMap put()用法及代码示例
- Java WeakHashMap remove()用法及代码示例
- Java WeakHashMap values()用法及代码示例
- Java WeekFields dayOfWeek()用法及代码示例
- Java WeekFields equals()用法及代码示例
- Java WeekFields getFirstDayOfWeek()用法及代码示例
- Java WeekFields getMinimalDaysInFirstWeek()用法及代码示例
- Java WeekFields hashCode()用法及代码示例
- Java WeekFields of()用法及代码示例
- Java WeekFields toString()用法及代码示例
- Java WeekFields weekBasedYear()用法及代码示例
- Java WeekFields weekOfMonth()用法及代码示例
- Java WeekFields weekOfWeekBasedYear()用法及代码示例
- Java WeekFields weekOfYear()用法及代码示例
- Java Writer hashCode()用法及代码示例
注:本文由纯净天空筛选整理自佚名大神的英文原创作品 WeakHashMap Class in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。