当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java WeakHashMap用法及代码示例


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


相关用法


注:本文由纯净天空筛选整理自佚名大神的英文原创作品 WeakHashMap Class in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。