`
youyu4
  • 浏览: 442076 次
社区版块
存档分类
最新评论

java -- WeakHashMap

 
阅读更多

java -- WeakHashMap

 

 

特点

 

  • WeakHashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。
  • WeakHashMap 也是一个散列表,它存储的内容也是键值对(key-value)映射。
  • WeakHashMap 键和值都可以是null。
  • WeakHashMap 的键是“弱键”。在 WeakHashMap 中,当某个键不再正常使用时,会被从WeakHashMap中被自动移除。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。某个键被终止时,它对应的键值对也就从映射中有效地移除了。
  • 非线程安全

 

 

扩容

 

    因为是与HashMap类似的散列表,所以扩容跟HashMap也是类似的。

 

 

 

自动删除原理

 

    1. 新建WeakHashMap,将“键值对”添加到WeakHashMap中。

        实际上,WeakHashMap是通过数组table保存Entry(键值对);每一个Entry实际上是一个单向链表,即Entry是键值对链表。

 

    2. 当某“弱键”不再被其它对象引用,并被GC回收时。在GC回收该“弱键”时,这个“弱键”也同时会被添加到ReferenceQueue(queue)队列中。

 

    3. 当下一次我们需要操作WeakHashMap时,会先同步table和queue。table中保存了全部的键值对,而queue中保存被GC回收的键值对;同步它们,就是删除table中被GC回收的键值对。

 

 

 

WeakHashMap例子

 

package com.alibaba.itbu.job.billing;  
  
import java.util.Map;  
import java.util.WeakHashMap;  
  
public class WeakHashMapTest {  
    static Map wMap = new WeakHashMap();  
    public static void init(){  
        wMap.put("1", "ding");  
        wMap.put("2", "job");  
    }  
    public static void testWeakHashMap(){  
  
        System.out.println("first get:"+wMap.get("1"));  
        try {  
            Thread.sleep(5000);  
        } catch (InterruptedException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        System.out.println("next get:"+wMap.get("1"));  
    }  
    public static void main(String[] args) {  
        testWeakHashMap();  
    }  
} 

 

上面例子, 第一次执行时要初始化,然后在5s内是不会清除的,大概在10几秒时会清除

 

第一次执行:

first get:ding

next get:ding

 

过一会再执行:

first get:null

next get:null

 

 

 

WeakHashMap的构造函数

 

// 默认构造函数。
WeakHashMap()

// 指定“容量大小”的构造函数
WeakHashMap(int capacity)

// 指定“容量大小”和“加载因子”的构造函数
WeakHashMap(int capacity, float loadFactor)

// 包含“子Map”的构造函数
WeakHashMap(Map<? extends K, ? extends V> map)

 

 

 

WeakHashMap的API

 

void                   clear()
Object                 clone()
boolean                containsKey(Object key)
boolean                containsValue(Object value)
Set<Entry<K, V>>       entrySet()
V                      get(Object key)
boolean                isEmpty()
Set<K>                 keySet()
V                      put(K key, V value)
void                   putAll(Map<? extends K, ? extends V> map)
V                      remove(Object key)
int                    size()
Collection<V>          values()

 

 

 

WeakHashMap遍历方式

 

方法一,遍历键值对

 

// 假设map是WeakHashMap对象
// map中的key是String类型,value是Integer类型
Integer integ = null;
Iterator iter = map.entrySet().iterator();
while(iter.hasNext()) {
    Map.Entry entry = (Map.Entry)iter.next();
    // 获取key
    key = (String)entry.getKey();
        // 获取value
    integ = (Integer)entry.getValue();
}

 

方法二,遍历键

 

// 假设map是WeakHashMap对象
// map中的key是String类型,value是Integer类型
String key = null;
Integer integ = null;
Iterator iter = map.keySet().iterator();
while (iter.hasNext()) {
        // 获取key
    key = (String)iter.next();
        // 根据key,获取value
    integ = (Integer)map.get(key);
}

 

方法三,遍历值

 

// 假设map是WeakHashMap对象
// map中的key是String类型,value是Integer类型
Integer value = null;
Collection c = map.values();
Iterator iter= c.iterator();
while (iter.hasNext()) {
    value = (Integer)iter.next();
}

 

分享到:
评论

相关推荐

    java集合-WeakHashMap的使用

    WeakHashMap是Java中的一种特殊的哈希表实现,它使用弱引用(Weak Reference)来保存键对象。当键对象没有被其他强引用引用时,在垃圾回收时会自动从WeakHashMap中移除对应的键值对。

    1-Collections-Overview-Section-Java-Collections-S_overview

    WeakHashMap和IdentityHashMap则提供了特殊的键引用策略。 3. 工具类: - **Collections**: 提供了一系列静态方法,用于操作集合,如排序、查找、填充、反转等。 - **Arrays**: 用于处理数组,包含排序、比较、...

    JAVA-提高反射效率

    - **缓存反射对象**:使用WeakHashMap或ConcurrentHashMap存储已获取的Class、Method、Constructor对象,避免重复查找。 - **使用invokeStatic()**:如果可以,优先考虑使用Method的invokeStatic(),以减少对象...

    java-all.pdf

    - **WeakHashMap**:允许键被垃圾回收的映射。 - **Collections**:提供了许多静态方法来操作集合。 #### 五、输入/输出流 Java 提供了多种 I/O 操作的方式,包括文件读写、网络通信等。 - **File**:表示文件和...

    Java编程WeakHashMap实例解析

    Java编程WeakHashMap实例解析 WeakHashMap是Java编程中的一种特殊的HashMap实现,它使用弱引用来保存键和值,这样可以使得垃圾回收器自动清理键和值。在WeakHashMap中,键和值都是弱引用的,这样可以避免内存泄露...

    picketlink-jbas-common-2.6.0.CR4.zip

    【描述】"Java-WeakIdentityHashMap.zip, weakhashmap identityhashmapa独立库的组合,用于weakidentityhashmap实现内/外字段" 描述的是一个特定的Java数据结构实现,即WeakIdentityHashMap。这是一个结合了...

    java-structures:通过Java中的一些常见数据结构运行以刷新我的脑海语言

    Java提供了HashMap、TreeMap和WeakHashMap等实现。 9. **堆**:堆是一种特殊的树形数据结构,满足最大堆或最小堆的性质。Java的PriorityQueue实现了堆的概念。 10. **树**:树包括二叉树、平衡树(如AVL树和红黑树...

    Java期末复习-类集框架

    Java 类集框架是Java编程语言中用于存储和操作对象集合的核心组件。它提供了一系列接口和类,方便开发者处理各种数据结构,如列表、队列、集合、映射等。类集框架的最大父接口是`Collection`,而`Map`接口则是处理...

    Java常见面试题集-

    ### Java常见面试题详解 #### 1. Java访问修饰符:`public`,... - `WeakHashMap`: 允许键被垃圾回收器回收的 `Map` 实现。 这些集合类和接口共同构成了 Java 中处理复杂数据结构的基础,为开发者提供了强大的工具集。

    Collections源码java-Custom-Java:这是我从各种来源在Internet上发现的一些问题的集合,这些问题已用Java解决

    例如,我们可以创建一个基于弱引用的WeakHashMap,当Key不再被引用时,Key-Value对将自动从Map中移除,这在内存管理中非常有用。 标签“系统开源”表明,我们可以通过阅读和学习开源的Collections源码,了解其设计...

    WeakHashMap的使用方法详解

    WeakHashMap是Java中的一种哈希映射表,它的键是弱引用的,意味着当 WeakHashMap 的键对象只有 WeakHashMap 自己持有时,垃圾回收器可以将其回收。WeakHashMap 的使用方法主要体现在以下几个方面: 1. WeakHashMap...

    Java 基础核心总结-.pdf

    Java 提供了丰富的集合类,如ArrayList、Vector、LinkedList、Stack、HashSet、TreeSet、LinkedHashSet、PriorityQueue、HashMap、TreeMap、LinkedHashMap、Hashtable、IdentityHashMap、WeakHashMap等。Collections...

    清华妹子的Java仓库(进阶学习路线)

    本仓库记录了我的Java学习进阶之路,涵盖了Java基础、JDK源码、JVM中的重要知识,附有代码和博客讲解,旨在提供一个Java在线共享学习平台,帮助更多的...Java集合框架源码解读(4)——WeakHashMap Java集合框架源码解读

    Java内置观察者模式

    Java 1.6后提供了`WeakHashMap`,可以用于存储弱引用的观察者。 - **多参数通知**:默认的`update`方法只传递了一个`Object`参数,可能无法满足复杂场景的需求。可以通过自定义参数类型或使用`java.util.EventObject...

    Java 基础核心总结 +经典算法大全.rar

    《Java 基础核心总结》 Java 概述 什么是 Java2 Java 的特点Java 开发环境 JDK JRE Java 开发环境配置 Java 基本语法 数据类型基础语法运算符 Java 执行控制流程条件语句 if 条件语句 if...else 条件语句if...else ...

    JAVA 反射机制应用

    - 使用缓存,如使用WeakHashMap存储已经反射得到的Field、Method或Constructor对象,避免重复查找。 - 避免反射调用敏感方法,如修改final字段或私有成员,除非明确知道这样做是安全的。 总之,Java反射机制为...

    Java 基础核心总结.pdf

    WeakHashMap和IdentityHashMap则提供了特殊的键值映射策略。 此外,Java的I/O流系统支持字符和字节流,如File类处理文件操作,InputStream和OutputStream处理字节流,Reader和Writer处理字符流。null是Java中的特殊...

    简易人员管理系统(纯Java版)

    7. **缓存机制**:为了提升性能,系统可能使用了内存缓存,如Java的WeakHashMap或Guava Cache,将频繁访问的数据暂存于内存中,减少对硬盘的访问。 8. **权限管理**:管理员账号的设置涉及权限控制,系统可能使用了...

    java 9.27_java_

    在内存模型方面,Java 9引入了弱引用关联映射表(`WeakHashMap`)的新实现,这在处理内存敏感的应用场景中更有优势。 最后,Java 9对Javadoc也进行了改进,支持Markdown语法,使得文档注释更加易读和格式化。 总的来...

Global site tag (gtag.js) - Google Analytics