- 浏览: 197592 次
- 性别:
- 来自: 上海
文章分类
最新评论
http://mzlly999.iteye.com/blog/1126049
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将会保留
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将会保留
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()); } } }
发表评论
-
Java 5 并发学习(转)
2012-06-26 14:38 859Java 5 并发学习 在Java5之后,并发线程这块发生 ... -
volatile 的高级模式
2012-02-22 13:07 730前面几节介绍的模式涵盖了大部分的基本用例,在这些模式中使用 v ... -
The "Double-Checked Locking is Broken" Declaration
2012-02-22 10:34 957http://www.cs.umd.edu/~pugh/jav ... -
Log4j配置文件详细说明[转]
2012-02-14 10:48 1343属性文件Properties properties属性文件 ... -
Log4j的配置文件
2012-02-14 10:42 810Log4j支持两种配置文件格式,一种是java属性文件(键—值 ... -
单例模式的俩种方式
2012-01-04 14:09 921等等 单例模式的俩种方式: 饿汉式 class Singlet ... -
Mysql连接数据库:PreparedStatement.addBatch()方法
2011-12-23 08:43 58161.Eclipse连接MySQL数据库 mysql>C ... -
java中ArrayList 、LinkList区别
2011-12-21 15:30 1168java中ArrayList 、LinkList、List区别 ... -
Thread的实现
2011-12-21 14:25 1201Making a Thread A thread in Jav ... -
Date4j,一个简约的日期处理类库
2011-12-14 10:13 832Java本身的日期类在JDK1.0版本之后就再也没有更新过,同 ... -
How to use Log4j
2011-09-29 13:57 8061. LogManager.getInstance().get ... -
重写hashCode和equals方法(转)
2011-09-27 09:58 1130如果你的对象想散列存 ... -
学习Enum转
2011-09-22 14:11 8711. 关于 Java Enum: 学过 C/C++ 等 ... -
PO BO VO DTO POJO DAO概念及其作用(转)
2011-09-20 09:49 661J2EE开发中大量的专业缩略语很是让人迷惑,尤其是跟一些高手讨 ... -
Thread的实现
2011-09-20 09:47 855Thread的实现 1.extend Thread,then ... -
Adapter模式(转)
2011-08-17 15:48 883[b]GOF《设计模式》一书对Adapter模式是这样描述的: ... -
JVM常见配置汇总
2011-08-15 14:56 1902从这个图中可以看到, ... -
Abstract or Interface
2011-08-11 15:02 725详解java中的抽象类和接 ... -
HashMap HashTable TreeMap
2011-08-11 13:45 962Map中我们通过对象来对对象进行索引,用来索引的对象叫做key ... -
多线程死锁问题(转)
2011-08-10 19:42 582前天俺们谈到了加锁,但是在使用加锁的同时又会带来一个问题,就是 ...
相关推荐
和 HashMap 不同的是,Hashtable 不允许 null 键和 null 值。此外,Hashtable 的行为更接近于传统数据库的表格,它不允许空引用作为键或值,因此在某些场景下可能更严谨。 WeakHashMap 类 WeakHashMap 是 HashMap ...
### HashMap与HashTable和HashSet的区别 #### 一、概述 在Java集合框架中,`HashMap`, `HashTable` 和 `HashSet` 是三个重要的数据结构,它们分别实现了`Map`接口和`Set`接口,提供了不同的功能来满足不同的编程...
3. WeakHashMap 与 HashMap 的区别:WeakHashMap 的键是弱引用的,而 HashMap 的键是强引用的,意味着 HashMap 的键对象永远不会被垃圾回收器回收。 4. WeakHashMap 的应用实例:Tomcat 中的缓存机制使用了 ...
在深入探讨《HASHMAP缓存.txt》所提及的知识点前,我们先来解析一下文档的标题、描述和部分内容,以确保我们对所讨论的主题有全面的理解。标题“HASHMAP缓存.txt”暗示了文档主要关注的是Java编程语言中HashMap作为...
Java中的容器类是Java集合框架的重要组成部分,它们用于存储和管理数据。...在实际应用中,通常推荐使用非同步的实现,如ArrayList和HashMap,因为它们的性能更高,然后根据需要在多线程场景下添加同步机制。
WeakHashMap是Java编程中的一种特殊的HashMap实现,它使用弱引用来保存键和值,这样可以使得垃圾回收器自动清理键和值。在WeakHashMap中,键和值都是弱引用的,这样可以避免内存泄露的问题。 WeakHashMap的实现...
15. IdentityHashMap 和 HashMap 的区别: - IdentityHashMap 使用对象的引用相等性而非对象的equals()方法来判断键是否相同。 - HashMap 默认使用对象的equals()和hashCode()方法来比较键。 16. Iterator 和 ...
Map接口则用于存储键值对,例如HashMap、TreeMap和WeakHashMap。HashMap提供快速的存取,基于哈希表实现;TreeMap则按照键的自然顺序或自定义比较器排序;WeakHashMap使用弱引用作为键,当键不再被引用时,键值对会...
在Java编程语言中,`HashMap`、`Hashtable`和`HashSet`都是集合框架的重要组成部分,分别用于存储键值对和不重复元素。下面将详细解释它们之间的区别。 首先,`Hashtable`是`Map`接口的一个早期实现,它提供了一个...
常见的Map实现有HashMap、TreeMap、Hashtable和WeakHashMap。HashMap是基于哈希表的,快速查找但无序;TreeMap基于红黑树,有序且支持按键或按键值排序;Hashtable是线程安全的老式实现,与Vector一样已较少使用;...
Map接口的实现有HashMap、LinkedHashMap、TreeMap和WeakHashMap,HashMap提供快速查找,LinkedHashMap保持插入顺序,TreeMap按自然顺序或定制比较器排序,WeakHashMap则使用弱引用键。此外,Hashtable是古老的线程...
`WeakHashMap`与`HashMap`的主要区别在于键的引用类型。在`HashMap`中,键是强引用,即使在其他地方没有引用,只要存在于`HashMap`中,对象就不会被垃圾回收。而在`WeakHashMap`中,键是弱引用,当垃圾回收器回收了...
6. HashMap和HashSet的区别:HashMap关注键值对,HashSet关注元素的唯一性,两者都基于哈希表实现,但HashSet的元素是HashMap的键。 7. 多线程问题:HashMap在多线程环境下不安全,可能导致死循环,应使用...
Map接口的实现类有Hashtable、HashMap、LinkedHashMap、WeakHashMap和IdentityHashMap。Hashtable与HashMap类似,但它是线程安全的,不接受null键值。HashMap是非同步的,允许null键和null值。LinkedHashMap保持了...
在Java编程语言中,集合框架是处理对象组织和操作的...在多线程环境中,线程安全的实现如Vector和Hashtable是必要的,但在单线程或性能要求较高的情况下,非线程安全的实现如ArrayList、LinkedList和HashMap通常更优。
书中还提到可以用WeakHashMap来作为缓存的容器可以有效解决这一问题。之前也确实遇到过类似问题,但是没有接触过“弱引用”相关的问题,于是查阅了一些资料。 《Java 理论与实践: 用弱引用堵住内存泄漏》一文也...
首先,让我们讨论`Hashtable`和`HashMap`的区别。`Hashtable`是`Dictionary`的子类,它是一个线程安全的容器,其方法默认是同步的。这意味着在多线程环境中,你可以直接使用`Hashtable`而不用担心数据同步问题。相反...
【标题】:集合框架中的set、list和map区别与联系 在Java编程中,集合框架是数据结构的核心,其中set、list和map是最常见的三种数据结构。这些数据结构各有特点,适应不同的应用场景。 1. **List(列表)** - **...
在Java中,有许多实现了Map接口的类,如HashMap、TreeMap、LinkedHashMap等,它们各自具有不同的特性和性能特点。本篇文章将主要围绕这些Map的主要实现类进行源码分析,探讨其内部工作原理。 一、HashMap HashMap...