温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

LinkedHashSet特点是什么

发布时间:2026-07-24 12:21:27 来源:亿速云 阅读:98 作者:小樊 栏目:编程语言

LinkedHashSet 是 Java 集合框架中的一个类,它继承自 HashSet,同时实现了 Set 接口。它的主要特点可以概括为:去重 + 有序(插入顺序)


一、LinkedHashSet 的核心特点

1. ✅ 元素不重复(Set 的特性)

  • HashSet 一样,不允许重复元素
  • 判断重复依据:hashCode() + equals()
Set<String> set = new LinkedHashSet<>();
set.add("A");
set.add("B");
set.add("A"); // 不会插入

2. ✅ 保持插入顺序(与 HashSet 的最大区别)

  • 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 ✅ 有序 自然顺序 / 自定义排序

3. ✅ 底层基于 HashMap + 双向链表

  • 内部使用 HashMap + 双向链表
  • 链表用于维护插入顺序
  • 实际元素存储在 HashMap 的 key 中

结构示意:

HashMap
  key -> value(固定 PRESENT)
  双向链表维护顺序

4. ✅ 允许 null 元素

LinkedHashSet<String> set = new LinkedHashSet<>();
set.add(null);
set.add("A");

5. ✅ 非线程安全

  • HashSet 一样
  • 多线程环境下需要手动同步或使用:
Set<String> set = Collections.synchronizedSet(new LinkedHashSet<>());

6. ✅ 性能略低于 HashSet

  • 因为要维护链表
  • 插入 / 删除 / 查找仍然是 O(1)(平均)
操作 时间复杂度
add O(1)
remove O(1)
contains O(1)

二、LinkedHashSet 的适用场景

需要去重,又需要保留插入顺序

  • 去重 + 顺序敏感
  • 场景示例:
    • 记录用户访问顺序
    • 去重日志
    • 缓存最近访问记录
    • 页面访问路径

❌ 不适合:

  • 需要排序(用 TreeSet
  • 高并发场景(需额外同步)

三、LinkedHashSet vs HashSet vs TreeSet 对比

特性 LinkedHashSet HashSet TreeSet
是否去重
是否有序 ✅ 插入顺序 ✅ 排序
底层结构 哈希表 + 链表 哈希表 红黑树
是否允许 null
性能 稍慢 最快 较慢

四、一句话总结

LinkedHashSet = HashSet + 插入顺序维护

如果你愿意,我也可以帮你画一张 内部结构图 或结合 面试常问点 再总结一版。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI