集合系列 Set(七):LinkedHashSet
发布日期:2021-05-09 01:08:07 浏览次数:14 分类:博客文章

本文共 1064 字,大约阅读时间需要 3 分钟。

LinkedHashSet 继承了 HashSet,在此基础上维护了元素的插入顺序。

public class LinkedHashSet
extends HashSet
implements Set
, Cloneable, java.io.Serializable

原理

LinkedHashSet 的源码非常简单,只有简单的四4个构造方法。

public LinkedHashSet(int initialCapacity, float loadFactor) {    super(initialCapacity, loadFactor, true);}    public LinkedHashSet(int initialCapacity) {    super(initialCapacity, .75f, true);}    public LinkedHashSet() {    super(16, .75f, true);}    public LinkedHashSet(Collection
c) { super(Math.max(2*c.size(), 11), .75f, true); addAll(c);}

但我们不是说 HashSet 还维护了元素的插入顺序么?那这部分代码写在哪里呢?

这里我们要注意一个细节,即 LinkedHashSet 调用的都是 HashSet 的三个参数构造方法,即 HashSet 的这个方法。

HashSet(int initialCapacity, float loadFactor, boolean dummy) {    map = new LinkedHashMap<>(initialCapacity, loadFactor);}

从上面的代码我们知道,LinkedHashSet 虽然继承的是 HashSet,但是其却使用 LinkedHashMap 做为实现类。而 LinkedHashMap 则本身维护了元素的插入顺序,这在我们接下来解析 LinkedHashMap 源码的时候会讲到。

总结

LinkedHashSet 是在 HashSet 的基础上,维护了元素的插入顺序。虽然 LinkedHashSet 使用了 HashSet 的实现,但其却调用了 LinkedHashMap 作为最终实现,从而实现了对插入元素顺序的维护。

上一篇:集合系列 Set(八):TreeSet
下一篇:集合系列 Set(六):HashSet

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年05月10日 07时29分43秒