3分钟搞掂Set集合

小编 2026-06-30 阅读:169 评论:0
前言声明,本文用的是jdk1.8前面章节回顾:Collection总览List集合就这么简单【源...

前言

声明,本文用的是jdk1.8

前面章节回顾:

现在这篇主要讲Set集合的三个子类:

  • HashSet集合
    • A:底层数据结构是哈希表(是一个元素为链表的数组) + 红黑树
  • TreeSet集合
    • A:底层数据结构是红黑树(是一个自平衡的二叉树)
    • B:保证元素的排序方式
  • LinkedHashSet集合
    • A::底层数据结构由哈希表(是一个元素为链表的数组)和双向链表组成。

这篇主要来看看它们比较重要的方法是如何实现的,需要注意些什么,最后比较一下哪个时候用哪个~

强调:在学习本文之前,最好是看过Map系列的文章

看这篇文章之前最好是有点数据结构的基础:

当然了,如果讲得有错的地方还请大家多多包涵并不吝在评论去指正~

一、HashSet剖析

首先,我们来看一下HashSet的继承结构图:

3分钟搞掂Set集合

按照惯例,我们来看看HashSet顶部注释:

3分钟搞掂Set集合

从顶部注释来看,我们就可以归纳HashSet的要点了:

  • 实现Set接口
  • 不保证迭代顺序
  • 允许元素为null
  • 底层实际上是一个HashMap实例
  • 非同步
  • 初始容量非常影响迭代性能

我本来也是想在写完List集合就转到Set集合的了,可是:看到底层实际上是一个HashMap实例时,我就去学习Map集合先了~

顶部注释说底层实际上是一个HashMap实例,那证据呢?

3分钟搞掂Set集合

我们再来看一下HashSet整个类的方法和属性:

3分钟搞掂Set集合

对于学习过HashMap的人来说,简直简单得让人开心,哈哈哈~

我们知道Map是一个映射,有key有value,既然HashSet底层用的是HashMap,那么value在哪里呢???

3分钟搞掂Set集合

value是一个Object,所有的value都是它

所以可以直接总结出:HashSet实际上就是封装了HashMap,操作HashSet元素实际上就是操作HashMap。这也是面向对象的一种体现,重用性贼高

建议:先去阅读HashMap就是这么简单【源码剖析】

二、TreeSet剖析

首先,我们也来看看TreeSet的类继承结构图:

3分钟搞掂Set集合

按照惯例,我们来看看TreeSet顶部注释:

3分钟搞掂Set集合

从顶部注释来看,我们就可以归纳TreeSet的要点了:

  • 实现NavigableSet接口
  • 可以实现排序功能
  • 底层实际上是一个TreeMap实例
  • 非同步

3分钟搞掂Set集合

三、LinkedHashSet剖析

首先,我们也来看看TreeSet的类继承结构图:

3分钟搞掂Set集合

按照惯例,我们来看看LinkedHashSet顶部注释:

3分钟搞掂Set集合

从顶部注释来看,我们就可以归纳LinkedHashSet的要点了:

  • 迭代是有序的
  • 允许为null
  • 底层实际上是一个HashMap+双向链表实例(其实就是LinkedHashMap)...
  • 非同步
  • 性能比HashSet差一丢丢,因为要维护一个双向链表
  • 初始容量与迭代无关,LinkedHashSet迭代的是双向链表

四、总结

可以很明显地看到,Set集合的底层就是Map,所以我都没有做太多的分析在上面,也没什么好分析的了。

下面总结一下Set集合常用的三个子类吧:

HashSet:

  • 无序,允许为null,底层是HashMap(散列表+红黑树),非线程同步

TreeSet:

  • 有序,不允许为null,底层是TreeMap(红黑树),非线程同步

LinkedHashSet:

  • 迭代有序,允许为null,底层是HashMap+双向链表,非线程同步

从结论而言我们就可以根据自己的实际情况来使用了。

参考资料:

如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以关注微信公众号:Java3y。为了大家方便,刚新建了一下qq群:742919422,大家也可以去交流交流。谢谢支持了!希望能多介绍给其他有需要的朋友

文章的目录导航https://zhongfucheng.bitcron.com/post/shou-ji/wen-zhang-dao-hang

目前初步打算写多线程,你们觉得怎么样呢?可以在评论区留言~

更多的文章可往:文章的目录导航
版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表