WeakHashMap和HashMap的区别
2016-04-04 08:38
351 查看
WeakHashMap,此种Map的特点是,当除了自身有对key的引用外,此key没有其他引用那么此map会自动丢弃此值,见实例:此例子中声明了两个Map对象,一个是HashMap,一个是WeakHashMap,同时向两个map中放入a、b两个对象,当HashMap remove掉a 并且将a、b都指向null时,WeakHashMap中的a将自动被回收掉。出现这个状况的原因是,对于a对象而言,当HashMap remove掉并且将a指向null后,除了WeakHashMap中还保存a外已经没有指向a的指针了,所以WeakHashMap会自动舍弃掉a,而对于b对象虽然指向了null,但HashMap中还有指向b的指针,所以WeakHashMap将会保留
原文转载于http://mzlly999.iteye.com/blog/1126049
package test; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.WeakHashMap; public class Test { public static void main(String[] args) throws Exception { String a = new String("a"); String b = new String("b"); Map weakmap = new WeakHashMap(); Map map = new HashMap(); map.put(a, "aaa"); map.put(b, "bbb"); weakmap.put(a, "aaa"); weakmap.put(b, "bbb"); map.remove(a); a=null; b=null; System.gc(); Iterator i = map.entrySet().iterator(); while (i.hasNext()) { Map.Entry en = (Map.Entry)i.next(); System.out.println("map:"+en.getKey()+":"+en.getValue()); } Iterator j = weakmap.entrySet().iterator(); while (j.hasNext()) { Map.Entry en = (Map.Entry)j.next(); System.out.println("weakmap:"+en.getKey()+":"+en.getValue()); } } }
原文转载于http://mzlly999.iteye.com/blog/1126049
相关文章推荐
- Java对象的引用与垃圾回收
- 第六周 技术博客
- 算法练习-背包问题
- 最短路&差分约束题集
- XCode 7.2,7.2.1和7.3的360云盘链接
- 【codevs 1082】线段树练习3
- Timer与AlarmManager的差别
- 中低端的路由器在局域网内的数据传输速度
- web开发技术点解析
- [web问题解决]本地服务器无法打开html文档 表单传入数据库报错
- MMO游戏技能攻击区域的计算2--给地图划分格子
- 甲骨文的 Linux 部门主管 Coekaerts 跳槽到微软
- 算法备忘录——排序
- 屌丝的常用排序-----one
- 设计模式之单例模式
- 继承log4.net的类
- [LeetCode] Longest Substring with At Most K Distinct Characters 最多有K个不同字符的最长子串
- 算法备忘录——基础数据结构与复杂度
- android studio导入背景图片,改变图标,定时退出三个操作
- 30分钟LINQ教程(0)