抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

前言

LinkedHashSetJava 集合框架中 Set 接口的一个实现类,位于 java.util 包下。它的主要特点是:

  • 无重复元素:继承自 HashSet,确保集合中没有重复的元素。
  • 保持插入顺序:通过内部维护一个双向链表,保证元素的迭代顺序与插入顺序一致。
  • 非线程安全:与 HashSet 一样,默认情况下没有同步机制,多线程环境下需要外部同步。

类声明如下:

1
2
3
public class LinkedHashSet<E>
extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable

从类声明可以看出,它直接继承自 HashSet,并实现了 Set 接口,同时支持克隆和序列化。

源码分析

继承关系与底层结构

LinkedHashSet 本质上是基于 HashSet 实现的,而 HashSet 底层依赖 HashMap。在 LinkedHashSet 中,元素的存储依然是通过 HashMap,但它通过特殊的构造方式维护了插入顺序。

关键点在于 HashMap 的改造:

LinkedHashSet 通过 HashMap 的一个变体(内部基于 LinkedHashMap 机制)实现顺序保持。

后记

继承与封装:LinkedHashSet 通过继承 HashSet 并指定 LinkedHashMap 作为底层存储,避免了自己实现哈希表逻辑。

双向链表:LinkedHashMap 维护了元素的插入顺序,这是 LinkedHashSetHashSet 的核心区别。

无额外逻辑:LinkedHashSet 本身几乎没有新增方法,完全依赖 HashSetLinkedHashMap 的实现。

评论