An entry in a WeakHashMap will automatically be removed when its key is no longer in ordinary use. More precisely,

the presence of a mapping for a given key will not prevent the key from being discarded by the garbage collector,

that is, made finalizable, finalized, and then reclaimed.When a key has been discarded its entry is effectively removed

from the map。

WeakHashMap 中,当某个key不再正常使用时,将自动移除其entry。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾

回收器对该键的丢弃,使该键成为可终止的,被终止,然后被回收。丢弃某个key时,其entry从map中有效地移除。

public class Test01 {
public static void main(String[] args) throws Exception {
String a = new String("a");
String b = new String("b"); Map<String,String> weakmap = new WeakHashMap<String,String>();
weakmap.put(a, "aaa");
weakmap.put(b, "bbb"); Map<String,String> map = new HashMap<String,String>();
map.put(a, "aaa");
map.put(b, "bbb"); map.remove(a); a=null;
b=null; System.gc();
System.out.println("----------HashMap----------");
for(Map.Entry<String, String> mEntry: map.entrySet()){
System.out.println(mEntry.getKey()+":"+mEntry.getValue());
} //对于a,当HashMap remove掉并且将a指向null后,
//除了WeakHashMap中还保存a外已经没有指向a的指针了,所以WeakHashMap会自动舍弃掉a
//而对于b虽然指向了null,但HashMap中还有指向b的指针,所以WeakHashMap将会保留b System.out.println("----------WeakHashMap----------");
for(Map.Entry<String, String> mEntry: weakmap.entrySet()){
System.out.println(mEntry.getKey()+":"+mEntry.getValue());
}
}
}

执行结果为:

 ----------HashMap----------
b:bbb
----------WeakHashMap----------
b:bbb

需要注意的是:

1.The behavior of the WeakHashMap class depends in part upon the actions of the garbage collector。WeakHashMap  类的行为部分取决于

垃圾回收器的动作。所以在第18行调用了System.gc()。如果去掉这行,则结果为:

 ----------HashMap----------
b:bbb
----------WeakHashMap----------
a:aaa
b:bbb

2.如果把第13行map.remove(a)去掉,则结果为:

 ----------HashMap----------
b:bbb
a:aaa
----------WeakHashMap----------
a:aaa
b:bbb

WeakHashMap 理解笔记的更多相关文章

  1. batch normalization学习理解笔记

    batch normalization学习理解笔记 最近在Andrew Ng课程中学到了Batch Normalization相关内容,通过查阅资料和原始paper,基本上弄懂了一些算法的细节部分,现 ...

  2. 深度学习-InfoGAN论文理解笔记

    在弄清楚InfoGAN之前,可以先理解一下变分推断目的以及在概率论中的应用与ELBO是什么,以及KL散度 https://blog.csdn.net/qy20115549/article/detail ...

  3. cookie&&session再理解笔记

    就拿php来说,两个php页面之间不拿get,post传递变量的话,数据是不能共享的.访问完1.php页面该页面的变量就被销毁了.所以就拿学校食堂来说,拿现金买饭的话你交完钱后,他给你个票以便确认你, ...

  4. bundle的理解笔记

    Bundle是一个键值对这样一个东西.就是一个string类型的东西,对应任何类型的东西.就是用来存值的. 这里可以看到他的作用 public void onClick(View v) { Strin ...

  5. 对socket的一点理解笔记

    需要学web service,但是在视频中讲解到了socket套接字编程.以前貌似课上老师有提过,只是没用到也感觉乏味.现在遇到,自己看了些博客和资料.记录一点理解,不知正确与否. 首先说这个名字,叫 ...

  6. WeakHashMap理解

    WeakHashMap实现了Map接口,是HashMap的一种实现,他使用弱引用作为内部数据的存储方案,WeakHashMap可以作为简单缓存表的解决方案,当系统内存不够的时候,垃圾收集器会自动的清除 ...

  7. JMS学习的个人理解笔记

    Jms即java消息服务javamessage service,所谓的面向消息编程,主要应用在企业内部各个系统之间做接口,以异步方式传递消息数据. Jms有2种传送模式,先来看第一种,即点对点传送模式 ...

  8. hive的简单理解--笔记

    Hive的理解 数据仓库的工具  Hive仅仅是在hadoop上面包装了SQL: Hive的数据存储在hadoop上 Hive的计算由MR进行 Hive批量处理数据  Hive的特点 1 可扩展性(h ...

  9. 目标检测 anchor 理解笔记

    anchor在计算机视觉中有锚点或锚框,目标检测中常出现的anchor box是锚框,表示固定的参考框. 目标检测的任务: 在哪里有东西 难点: 目标的类别不确定.数量不确定.位置不确定.尺度不确定 ...

随机推荐

  1. parseFloat

    parseFloat会把输入完整的数进行比较,不会比较中间数字.

  2. MP3/视频播放

    简单的视频.MP3播放 <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equ ...

  3. Open the Lock[HDU1195]

    Open the Lock Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  4. 【wikioi】1281 Xn数列(矩阵乘法)

    http://wikioi.com/problem/1281/ 矩阵真是个神奇的东西.. 只要搞出一个矩阵乘法,那么递推式可以完美的用上快速幂,然后使复杂度降到log 真是神奇. 在本题中,应该很快能 ...

  5. HDU 4647 Another Graph Game(贪心)

    题目链接 思路题.看的题解. #include <cstdio> #include <string> #include <cstring> #include < ...

  6. windows 中配置 nodejs npm

    npm安装模块的方式有两种:本地安装,全局安装. 这两者的区别在于,在用npm install xxx时加不加-g这个选项. 本地安装的路径在win中是当前cmd的路径.比如,我一打开cmd时,路径是 ...

  7. 7. Add a networking service

    Controller Node: 1. sudo vi /etc/nova/nova.conf [DEFAULT] ... network_api_class = nova.network.api.A ...

  8. HTML5:离线存储(缓存机制)-IndexDB

    https://www.w3.org/TR/IndexedDB/ .. <!DOCTYPE html> <html> <head> <meta charset ...

  9. Mybatis resultMap空值映射问题解决

    Mybatis在使用resultMap来映射查询结果中的列,如果查询结果中包含空值的列(不是null),则Mybatis在映射的时候,不会映射这个字段,例如 查询 name,sex,age,数据库中的 ...

  10. 2016.07.08,英语,《Vocabulary Builder》Unit 24

    mand/mend comes from mandare, Latin for 'entrust' or 'order'. command and commandment: [kə'mændmənt] ...