当前位置: 首页 > news >正文

JAVA集合

目录
  • Set
    • HashSet
    • 有序非线程安全 LinkedHashSet
    • 有序线程安全 ConcurrentLinkedHashSet
    • LinkedHashSet vs TreeSet
    • 深入解析
      • 1. LinkedHashSet
      • 2. TreeSet
  • 参考资料

Set

HashSet

Java中的Set集合的核心特性就是不允许包含重复的元素。它是一个不允许存储重复对象且不保证顺序的集合。
唯一性: Set集合中的每个元素都是唯一的,如果尝试添加一个已存在的元素,该操作会失败或被忽略。即使是 null 值也只能包含一个。
无序性: 大多数Set的实现类(如HashSet)不保证元素的顺序,即元素在集合中的存储和返回顺序可能与添加顺序不同。

有序非线程安全 LinkedHashSet

LinkedHashSet 是有序的,它维护插入顺序,同时不是线程安全的。要使其在多线程环境中使用,需要使用 Collections.synchronizedSet() 将其包装起来,或者使用 ConcurrentLinkedHashSet 等线程安全的集合类。

有序线程安全 ConcurrentLinkedHashSet

或者使用Collections.synchronizedSet() 包装LinkedHashSet
您好!很高兴为您对比 LinkedHashSetTreeSet。它们都是 Java 集合框架中的 Set 接口实现,但各自在底层实现、存储顺序和性能上有很大的不同。


LinkedHashSet vs TreeSet

特性 LinkedHashSet TreeSet
底层数据结构 哈希表(HashMap + 双向链表 红黑树(NavigableMap / TreeMap
存储顺序 维护元素的插入顺序(有序) 维护元素的自然排序定制排序(有序)
是否排序 (按插入顺序遍历,但元素本身无排序) (元素按大小排序)
允许 null 元素 允许一个 null 元素 不允许(在 Java 7 之后,TreeSet 不允许 null 元素,否则会抛出 NullPointerException
性能 插入、删除、查找操作的平均时间复杂度为 $O(1)$ 插入、删除、查找操作的时间复杂度为 $O(\log n)$
使用场景 需要快速的插入/查找,并且要求遍历时保持元素添加的先后顺序 需要对存储的元素进行自动排序,并支持范围查询、取最大/最小等操作。

深入解析

1. LinkedHashSet

  • 如何保持顺序? 它在 HashSet 的基础上增加了一个双向链表,这个链表会记录元素的插入顺序。因此,当你遍历 LinkedHashSet 时,元素会按照它们被添加到集合中的顺序出现。
  • 性能优势: 继承了哈希表的优点,提供极快的 $O(1)$ 平均性能。

2. TreeSet

  • 如何保持顺序? 它的底层是红黑树,这是一种自平衡二叉查找树。它确保元素在任何时候都处于排序状态
    • 自然排序: 元素需要实现 Comparable 接口。
    • 定制排序: 可以在构造 TreeSet 时传入一个 Comparator
  • 性能特点: 由于是基于树结构,所有基本操作的时间复杂度都是 $O(\log n)$,虽然比 LinkedHashSet 慢,但这是维持有序性的代价。
  • 特殊能力: 作为 SortedSetNavigableSet 的实现,它提供了许多额外的功能,例如获取小于/大于某个元素的子集、获取最大/最小元素等。

总结来说:

  • 如果您的主要需求是高性能且需要保持插入顺序,请使用 LinkedHashSet
  • 如果您的主要需求是让元素自动排序,请使用 TreeSet

您目前在开发中更倾向于使用哪一个呢?我可以提供一些它们具体的使用代码示例。

参考资料

http://www.hskmm.com/?act=detail&tid=34859

相关文章:

  • 【最新推荐】分享十大常用又靠谱的文件摆渡系统
  • C语言实现LDPC码译码功能
  • 2025年10月中国试验机厂家推荐:十强榜单对比与性能评测
  • [NOIP 2012 提高组] 开车旅行 的AC代码
  • Voice Chat: Resolving Lag and Stuttering with a Jitter Buffer
  • 2025 年报警器经销商最新推荐榜单:全面剖析海湾、青鸟等品牌服务商优势,为您筛选优质可靠合作伙伴燃气 / 太阳能 / 交通道路报警器推荐
  • 结构体
  • 专栏导航:《数据中心网络与异构计算:从瓶颈突破到架构革命》 - 实践
  • 扫描线总结
  • 2025年10月抗老面霜推荐:小鸟传领衔五强对比评测榜
  • 基于STM32芯片通过CAN总线控制电机运动
  • 2025 酒店家具厂家最新推荐榜:北木斋领衔五大新锐品牌,品质与创新双优之选全解析
  • 文献阅读笔记格式
  • Stream流
  • JS中的值传递和引用传递
  • 基于Java+Springboot+Vue开发的母婴商城管理系统源码+运行步骤
  • 乐理和蜂鸣器的实现
  • CF1288C Two Arrays 分析
  • 流水线
  • 基于MATLAB的谐波分析实现方案
  • 一文详解 | 纷享销客CRM如何助力快消巨头蒙牛实现全场景数字化转型
  • AI生成代码系列:开源代码片段检测的有效方法
  • 基于进化算法的自动神经架构搜索
  • 【tinyusb】首次使用
  • 2025 年西安标志标识厂家最新推荐排行榜:聚焦西北优质服务商,精选实力企业助您精准选型
  • 打卡
  • 2025年10月豆包关键词排名优化服务推荐排行榜:十大服务商深度对比与评测指南
  • 2025年10月豆包关键词排名优化服务推荐排行榜单:十大服务商深度对比与评测分析
  • 2025年10月豆包关键词排名优化服务排行榜:十家优质服务商综合评测与选择指南
  • 第五届计算机图形学、人工智能与数据处理国际学术会议