HashSet 底层是采用 HashMap实现的

JDK1.8版本之前: 哈希表 = 数组+链表
JDK1.8版本之后: 哈希表 = 数组+链表+红黑树(提高查询速度)

原理:

首先存储数据到集合中,先计算元素的哈希值;
将元素进行分组,相同hash值的元素为一组,链表是把相同的Hash值的元素连在了一起;
如果链表的长度超过了8位,那么就会把链表转化为红黑树。

红黑树:

特点:

1. HashSet中不允许存储重复元素
2. HashSet没有索引,不能使用普通for循环遍历
3. HashSet是无序的(意思是存储和取出的顺序不一致)
4. 底层是一个Hash表(又称散列表)

不允许有重复元素的实现原理:前提是存储的元素必须 重写hashCode方法和equals方法
(equals重写前比较的是两个对象的地址值,重写之后比较两个对象的内容)
在添加元素的时候,Set集合在调用add方法的时候,add方法会调用元素的hashCode方法和equals方法,判断元素是否重复
具体例子如下:(图片可能不是很清晰,来源于b站视频截图)

尊重原创,转发请附上链接!

谢谢!

HashSet 原理结构相关推荐

  1. [网站建设] 深度解析搜索引擎的原理结构

    搜索引擎(searchengine)也可以说是指根据一定的策略.运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统.搜索引擎包括 ...

  2. 原理分析_生化分析仪原理结构及参数对比

    生化分析仪又叫生化仪,是由电脑控制,将生化分析中的取样.加试剂.混匀.保温反应.检测.结果计算.可靠性判断.显示和打印.以及清洗等步骤组合在一起自动进行操作的分析仪器. 一.生化分析仪的工作原理 生化 ...

  3. 《电机学》第四篇 异步电机 第13、14三相异步电动机 原理/结构/特性 第15章 单相异步电动机

    第13章 异步电机的基本理论 结构 定子: 转子:鼠笼式(导条.短路环 构成闭合回路).绕线式(外接电阻 闭合回路) 绕线式可外串电阻,提高启动.调速性格. 工作原理 异步电机的三种运行状态: 感应电 ...

  4. HashMap和HashSet原理及底层实现

    HashMap底层用哈希算法实现,下面看一下哈希算表的整体概括: 当map.put("key","values");的时候,底层是这样的: static fin ...

  5. 一个七年的Java程序员从业总结:比起秃头,我更怕数据库底层设计原理结构

    前言 说到数据库这个词,我只能用爱恨交加这个词来形容它. 两年前在自己还单纯懵懂的时候进了数据库的课堂,听完数据库的课,觉得这是一门再简单不过的课程,任何一门编程语言都比SQL要晦涩难懂,任何一门理论 ...

  6. 语音技术IP电话的原理结构

    随着光网络的飞速发展和数字传输技术的应用,原来在数据通信网中被视为应用"瓶颈"的带宽和服务质量等问题一一得到解决,推动了IP技术的飞速发展,带动各种应用向IP靠拢, IP电话(又称 ...

  7. TCAM CAM 说明 原理 结构 Verilog 硬件实现

    TCAM 三态内容地址查找存储器,CAM内容地址查找存储器.区别在于TCAM多了一级掩码功能,也就是说可以指定某几位是dont care.匹配的时候0,1都行的意思. 广泛应用于数据流处理领域,本文简 ...

  8. HashSet存储自定义对象保证元素唯一性图解原理及代码优化

    HashSet存储自定义对象保证元素唯一性图解原理及代码优化 1.原理: * 1.HashSet原理       * 我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比 ...

  9. 光电倍增管PMT (photomultiplier tube) 原理、结构和特性总结

    在学习单光子计数器的时候涉及到了外光电效应和光电倍增管. 为了对外光电效应和光电倍增管有更深刻的印象,故参考下面的论文写了本文. 王海科,吕云鹏.光电倍增管特性及应用[J].仪器仪表与分析监测,200 ...

最新文章

  1. canal同步mysql到kafka_使用Canal同步MySQL数据到Kafka 得到的数据中sql字段无值-问答-阿里云开发者社区-阿里云...
  2. python3 os模块
  3. 回文字符串—回文子串—暴力破解法
  4. MySQL什么是关系_MySQL教程-关系模型
  5. 相同字符串的string对象不等
  6. java窗口只能点一个_java – 为什么界面只能在顶级类中声明?
  7. Redis五种数据类型及应用场景
  8. 08产品经理要明白的人性思维-团队管理篇
  9. 用C#打开文件对话框的方法和简单使用的程序
  10. python工资高还是java-未来Java、大数据、Python哪个前景更好,薪资更高?
  11. mysql5.7.22的配置说明_mysql 5.7.22 免安裝版Windows配置
  12. Android学习(十二) ContentProvider
  13. 自学网c语言教学视频教程下载,C语言从入门到精通教程 高清不加密 黄老师 视频教程 教学视频 百度网盘下载...
  14. 如何实现一个拍照搜题功能
  15. bcc语料库下载_CCL语料库与BCC语料库各自的特点是什么?
  16. 生产计划排程、车间工序排程、APS高级计划与排程
  17. windows10共享磁盘给局域网的mac和iphone访问
  18. Instruments 调试
  19. 基于联发科(MTK)MT8735平台的安卓4G全网通核心板
  20. 寒假刷题实录-基础语法-02判断语句

热门文章

  1. 微信公众号添加word文档附件教程_公众号添加Excel、PDF、PPT等附件教程
  2. 网站关键词排名,如何快速提升?
  3. 工程经济在施工项目成本控制中应用
  4. 适合中小企业的9大项目管理系统
  5. C/C++ fstream
  6. fstream、ifstream、ofstream
  7. 微型计算机中常见到的Ega.VGA等是指,大学计算机基础选择题汇总
  8. Android app 内存分配
  9. Linux下Socket编程一 socket 基础
  10. C#中二维数组的二维长度