前言
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 的实现。