有了之前HashMap和HashSet的经验,我想你应该也能够猜到,LinkedHashSet是对LinkedHashMap的包装。
public class LinkedHashSet<E>
extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable {
public LinkedHashSet() {
super(16, .75f, true);
}
/* 这是父类构造方法
* HashSet(int initialCapacity, float loadFactor, boolean dummy) {
* map = new LinkedHashMap<>(initialCapacity, loadFactor);
* }
*/
}
所以,接下来我们会对LinkedHashMap进行重点介绍。
其实和HashMap区别不大,只不过将每一个Entry按照顺序使用链表串起来了而已,这个链表还是双向的。所以遍历元素的时候,是操作的链表,而不是整个table。
HashMap有点特性它都有。它是非线程安全类。
LinkedHashSet也是一样的,就是一个Value固定的HashMap而已。
LinkedHashMap有一个经典的用法,就是去实现FIFO替换策略的缓存。这个策略有点类似于LRU,当缓冲区满的时候,会优先淘汰(释放)掉时间点较前的数据。使用LinkedHashMap实现起来也很简单,只要元素的个数达到阈值后,就可以将链表的头节点删除掉(链表的头节点是最先添加的数据)。
(基本上也没什么了,平时也很少使用这两个数据结构的)
2024.10.29