LinkedHashSet 是 Java 集合框架中的一个类,它继承自 HashSet,同时实现了 Set 接口。它的主要特点可以概括为:去重 + 有序(插入顺序)。
HashSet 一样,不允许重复元素hashCode() + equals()Set<String> set = new LinkedHashSet<>();
set.add("A");
set.add("B");
set.add("A"); // 不会插入
LinkedHashSet 按照元素插入的顺序来维护顺序Set<String> set = new LinkedHashSet<>();
set.add("A");
set.add("B");
set.add("C");
for (String s : set) {
System.out.println(s);
}
// 输出:A B C
对比:
| 集合类型 | 是否有序 | 顺序类型 |
|---|---|---|
| HashSet | ❌ 无序 | 无 |
| LinkedHashSet | ✅ 有序 | 插入顺序 |
| TreeSet | ✅ 有序 | 自然顺序 / 自定义排序 |
HashMap 的 key 中结构示意:
HashMap
key -> value(固定 PRESENT)
双向链表维护顺序
LinkedHashSet<String> set = new LinkedHashSet<>();
set.add(null);
set.add("A");
HashSet 一样Set<String> set = Collections.synchronizedSet(new LinkedHashSet<>());
| 操作 | 时间复杂度 |
|---|---|
| add | O(1) |
| remove | O(1) |
| contains | O(1) |
✅ 需要去重,又需要保留插入顺序
❌ 不适合:
TreeSet)| 特性 | LinkedHashSet | HashSet | TreeSet |
|---|---|---|---|
| 是否去重 | ✅ | ✅ | ✅ |
| 是否有序 | ✅ 插入顺序 | ❌ | ✅ 排序 |
| 底层结构 | 哈希表 + 链表 | 哈希表 | 红黑树 |
| 是否允许 null | ✅ | ✅ | ❌ |
| 性能 | 稍慢 | 最快 | 较慢 |
LinkedHashSet = HashSet + 插入顺序维护
如果你愿意,我也可以帮你画一张 内部结构图 或结合 面试常问点 再总结一版。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。