今天研究了一下WeakHashMap 出现了一个现象,使用String key1="key1" 与String key1=new String("key1") 结果大不相同,代码如下,还请大家帮忙分析一下:
import java.util.HashMap; import java.util.Map; import java.util.WeakHashMap; public class TestWeakHashMap { public static void main(String[] args) throws InterruptedException { String key1 = new String("k1"); String key2 = new String("K2"); //String key1 = "k1"; //String key2 = "k2"; Map<String,String> map = new HashMap<String,String>(); Map<String,String> wmap = new WeakHashMap<String,String>(); map.put(key1, "val1"); map.put(key2, "val2"); wmap.put(key1, "wval1"); wmap.put(key2, "wval2"); map.remove(key2); key2 = null; key1 = null; System.gc(); System.out.println("first access: " + wmap.size()); System.out.println("second access: " + wmap.size()); System.out.println("map: " + map.toString()); System.out.println("wmap: " + wmap.toString()); } }
相关推荐
WeakHashMap是Java中的一种特殊的哈希表实现,它使用弱引用(Weak Reference)来保存键对象。当键对象没有被其他强引用引用时,在垃圾回收时会自动从WeakHashMap中移除对应的键值对。
WeakHashMap的使用方法详解 WeakHashMap是Java中的一种哈希映射表,它的键是弱引用的,意味着当 WeakHashMap 的键对象只有 WeakHashMap 自己持有时,垃圾回收器可以将其回收。WeakHashMap 的使用方法主要体现在...
Java编程WeakHashMap实例解析 WeakHashMap是Java编程中的一种特殊的HashMap实现,它使用弱引用来保存键和值,这样可以使得垃圾回收器自动清理键和值。在WeakHashMap中,键和值都是弱引用的,这样可以避免内存泄露...
在IT领域,尤其是在Java编程中,`Map`接口及其实现类是处理键值对数据结构的关键工具。本文将深入探讨`Map`的各种用法,包括其基本操作、遍历方式以及一些高级应用,旨在为读者提供一个全面而深入的理解。 ### 基本...
- **expungeStaleEntries 方法**:为了确保 WeakHashMap 的键被正确清理,每当访问 WeakHashMap 的时候,都会调用 expungeStaleEntries 方法来清除已经无效的键值对。 #### 七、WeakHashMap 的局限性 - **访问触发...
`WeakHashMap`是一个键为弱引用的哈希映射,这意味着当键不再被其他地方引用时,即使映射中仍有键值对,该键也会被垃圾收集器回收。`WeakReference`则是一个特殊的引用类型,它不会阻止垃圾收集器回收所引用的对象。...
- Map接口提供键值对映射,如Hashtable、HashMap和WeakHashMap。 6. **STRING与STRINGBUFFER**: - STRING是不可变的,修改内容会创建新对象。 - STRINGBUFFER是可变的,修改内容不会创建新对象,适合多次修改。...
在Java编程中,WeakHashMap是一种特殊的哈希表,它的键(Key)是弱引用,当键被垃圾回收器清除后,即使有值(Value)存在,该条目也会自动从哈希表中移除。 线程死锁的原因通常包括以下几点: 1. **资源互斥**:每...
WeakHashMap中的键使用弱引用,当键的对象不再被引用时,键值对会被自动移除。 总的来说,理解这些Java基础概念对于面试和实际开发都是非常重要的。掌握它们能帮助你更好地应对各种编程挑战,提高编程效率。在面试...
书中还提到可以用WeakHashMap来作为缓存的容器可以有效解决这一问题。之前也确实遇到过类似问题,但是没有接触过“弱引用”相关的问题,于是查阅了一些资料。 《Java 理论与实践: 用弱引用堵住内存泄漏》一文也...
Map接口是Java集合框架中的重要组成部分,它提供了一种存储键值对数据结构的方式,使得我们可以通过键(Key)快速查找对应的值(Value)。在Java中,有许多实现了Map接口的类,如HashMap、TreeMap、LinkedHashMap等...
而在Java中,Key/Value存储使用HashMap、TreeMap、WeakHashMap等类,例如:`HashMap<String,String> map = new HashMap();map.put("key","value");`。需要注意的是,在Java中,Key/Value存储需要提供hashCode函数和...
HashMap 是一个散列表,它存储元素对(键值对)。HashMap 使用哈希函数将键映射到桶中,这样可以快速定位到对应的值。HashMap 不保证映射的顺序,特别是它不保证这种顺序在多次迭代之后保持不变。HashMap 允许 null ...
其他实现如LinkedHashMap保持插入顺序,WeakHashMap使用弱引用,IdentityHashMap比较对象的内存地址而非equals()。 示例代码: ```java // 创建ArrayList并添加元素 List<String> list = new ArrayList(); list.add...
List是有序的集合,而Map则是键值对的存储结构。 1. List接口与ArrayList类 List是一个接口,它是Collection接口的一个子接口,规定了元素的顺序和位置。ArrayList是实现List接口的具体类,它内部基于动态数组实现...
这使得弱引用常用于实现内存敏感的数据结构,如`WeakHashMap`。 - 示例:`WeakReference<String> weakRef = new WeakReference(new String("Hello"));` 4. **虚引用(Phantom Reference)** - 虚引用也称为幽灵...
- **键值对数量**:如果键值对的数量非常大,那么平衡树实现(如`TreeMap`)可能是更好的选择,因为它可以确保在所有情况下都具有稳定的性能。 - **有序性需求**:如果需要自然排序或自定义排序,则应该选择`...
WeakHashMap与WeakReferences相结合,当键的引用变得虚弱时,对应的键值对会被自动移除。 理解并熟练使用这些集合类和接口,对于编写高效、健壮的Java代码至关重要。在实际开发中,根据具体需求选择合适的数据结构...
5. WeakHashMap:键使用弱引用,当键不再被引用时,键值对会被自动删除。 Map的遍历方式: 1. for-each循环:使用增强for循环遍历Map的entrySet()。 2. Iterator迭代器:通过Map的entrySet().iterator()获取迭代器...