WeakHashMap原理

简介

  • 是一个散列表,它存储的内容是键值对(key-value)映射
  • 键和值都可以是null
  • 键是“弱键”
  • 数据结构同HashMap
  • 是不同步的

弱键实现原理

通过WeakReference和ReferenceQueue实现的。 WeakHashMap的key是“弱键”,即是WeakReference类型的;ReferenceQueue是一个队列,它会保存被GC回收的“弱键”。

实现步骤是:

  1. 弱键被GC回收时这个“弱键”也同时会被添加到ReferenceQueue(queue)队列
  2. 当下一次我们需要操作WeakHashMap时,会先同步table和queue。同步它们就是删除table中被GC回收的键值对

构造函数

1
2
3
4
5
6
7
8
9
10
11
// 默认构造函数。
WeakHashMap()

// 指定“容量大小”的构造函数
WeakHashMap(int capacity)

// 指定“容量大小”和“加载因子”的构造函数
WeakHashMap(int capacity, float loadFactor)

// 包含“子Map”的构造函数
WeakHashMap(Map<? extends K, ? extends V> map)

数据结构

  • table是一个Entry[]数组类型,而Entry实际上就是一个单向链表。哈希表的”key-value键值对”都是存储在Entry数组中的。
  • size是Hashtable的大小,它是Hashtable保存的键值对的数量。
  • threshold是Hashtable的阈值,用于判断是否需要调整Hashtable的容量。threshold的值=”容量*加载因子”。
  • loadFactor就是加载因子。
  • modCount是用来实现fail-fast机制的
  • queue保存的是“已被GC清除”的“弱引用的键”。



版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接,感谢各位看官!!!

本文出自:monkeyGeek

座右铭:生于忧患,死于安乐

欢迎志同道合的朋友一起交流、探讨!

monkeyGeek

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×