前言
LinkedHashSet
是 Java
集合框架中 Set
接口的一个实现类,位于 java.util
包下。它的主要特点是:
- 无重复元素:继承自
HashSet
,确保集合中没有重复的元素。 - 保持插入顺序:通过内部维护一个双向链表,保证元素的迭代顺序与插入顺序一致。
- 非线程安全:与
HashSet
一样,默认情况下没有同步机制,多线程环境下需要外部同步。
类声明如下:
1 | public class LinkedHashSet<E> |
从类声明可以看出,它直接继承自 HashSet
,并实现了 Set
接口,同时支持克隆和序列化。
源码分析
继承关系与底层结构
LinkedHashSet
本质上是基于 HashSet
实现的,而 HashSet
底层依赖 HashMap
。在 LinkedHashSet
中,元素的存储依然是通过 HashMap
,但它通过特殊的构造方式维护了插入顺序。
关键点在于 HashMap
的改造:
LinkedHashSet
通过 HashMap
的一个变体(内部基于 LinkedHashMap
机制)实现顺序保持。
后记
继承与封装:LinkedHashSet
通过继承 HashSet
并指定 LinkedHashMap
作为底层存储,避免了自己实现哈希表逻辑。
双向链表:LinkedHashMap
维护了元素的插入顺序,这是 LinkedHashSet
与 HashSet
的核心区别。
无额外逻辑:LinkedHashSet
本身几乎没有新增方法,完全依赖 HashSet
和 LinkedHashMap
的实现。