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());
}
}
}
分享到:
相关推荐
和 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 和 ...
WeakHashMap在死锁和CPU过高的问题中可能扮演的角色: 1. **锁竞争**:虽然WeakHashMap本身的内部实现是线程安全的,但在并发访问时,如果多个线程同时操作同一个WeakHashMap,可能会引发锁竞争,导致CPU升高。 2. *...
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`而不用担心数据同步问题。相反...
常见的Map实现类有Hashtable、HashMap和WeakHashMap。Hashtable与Vector类似,是线程安全的,但不推荐在现代Java中使用,因为它不允许null键和值。HashMap是非同步的,提供快速的查找,插入和删除操作,键和值都可以...