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

Set 如何保证元素不重复的?

💡 核心结论:一句话先记住

以最常用的 HashSet 为例,它自己其实是个“甩手掌柜”,底层完全是靠一个 HashMap 在帮它干活。它把你要存的元素当成 HashMap 的Key塞进去,利用“HashMap 的 Key 绝对不能重复”的铁律,顺理成章地实现了去重。


🔍 HashSet 存东西时的“两步判重法”

当你往 HashSet里执行add(元素)存东西时,底层的 HashMap 会像小安检员一样,进行以下两步高效率的检查:

第一步:对暗号(算hashCode

安检员先拿这个元素算出一个数字暗号(哈希值)。

  • 如果这个暗号在格子里从来没出现过,说明是新面孔,直接放行通过,成功存入!
  • 如果发现有人的暗号一模一样(哈希冲突),别着急,它不会马上拒绝,而是启动第二步。

第二步:验真身(比equals

因为不同东西的暗号偶尔也会撞款,安检员会把这两个暗号相同的东西揪出来,用equals()方法进行精细的“肉眼比对”:

  • 比对完发现内容确实不一样:行吧,那也是新东西,找个位置存进去。
  • 比对完发现内容完全一样:好家伙,真的是复制品!HashSet会直接把新来的拒之门外,返回false(但不会报错)。

💡 为什么非要分两步?

因为hashCode()是数字比较,计算机算起来极其飞快,能瞬间过滤掉 99% 的不重复元素;而equals()就像做全身扫描,比较慢。先用第一步大面积筛选,性能才能起飞。


🛑 工作和面试中的超级大坑

坑:只重写equals(),不重写hashCode()

如果你写了一个“自定义对象”(比如用户类),只重写了equals没重写hashCode,那 [HashSet] 的去重功能就会直接瘫痪

因为两个一模一样的对象,算出来的暗号(hashCode)却不一样,它们会直接在第一步被分到不同的格子里,连互相见面的机会都没有,equals根本不会执行。结果就是 [Set] 里塞进去了两个完全一样的数据。


🆚 常见的三个 Set 兄弟对比

Set 实现类底层靠谁怎么判重出来的顺序速度
HashSet(盲选首选)HashMaphashCode+equals完全无序(随机乱坐)🚀 极快
LinkedHashSetLinkedHashMaphashCode+equals先进先出(怎么放进去就怎么出来)🏎️ 快
TreeSetTreeMapcompareTo()比较大小自动从小到大排序🚗 一般

🎯 秒记口诀

HashSet 底层 HashMap,元素做 Key 占住位。

先比 hash 快速筛,再比 equals 验真伪。

想要去重不失效,两个方法齐重写!

http://www.gsyq.cn/news/1471619.html

相关文章:

  • 告别‘黑箱’操作:深度解读DPABI提取的脑区特征数据,用BrainNet Viewer做出炫酷差异图
  • 别再死磕swagger-ui.html了!SpringBoot整合Swagger3.0的正确姿势与依赖选择(附完整POM)
  • Jupyter模型生产化:ONNX+Triton+K8s四层解耦部署实战
  • 2026兰州工业提升门厂家TOP5推荐:甘肃工业平开门、甘肃工业推拉门、甘肃工业提升门、甘肃工业门厂家电话、甘肃广告道闸选择指南 - 优质品牌商家
  • 保姆级教程:在STM32F4上为OpenMV数据设计一个轻量级通信协议(附CubeMX配置)
  • 【脚本】JAVA 执行 阿里QLExpress 动态脚本 demo 基础版 增加项目灵活性
  • 西北玻璃隔断厂家技术实力实测与专业选型指南:甘肃卫生间隔断/甘肃双玻百叶隔断/甘肃定制隔断/甘肃成品隔断/甘肃活动隔断/选择指南 - 优质品牌商家
  • 传统企业转型必看!全方位拆解企业数字化经营落地路径
  • 告别MCU引脚焦虑:用TIC12400-Q1的SPI接口轻松管理24路开关检测(附完整C代码)
  • PuTTY vs CuteCom:在Ubuntu上调试Arduino/树莓派,我最终选择了它
  • 西宁草毯厂家实力排行:西宁园林养护药品、西宁木制品加工厂、西宁木制品厂家、西宁树木保护支架、西宁树木固定支架、西宁树木涂白剂厂家选择指南 - 优质品牌商家
  • 以太网安全基础
  • 如何通过ExifToolGUI高效管理海量照片元数据:专业摄影师必备的5大实战场景
  • 本地闭环流处理技术,实现军营高保密等级视频孪生应用
  • PHP预测算法原理、常用类型与实际应用详解
  • 用STorM32 GUI和Data Display窗口,像调试软件一样调校你的三轴云台PID
  • 1篇1章1节:医药数据科学的历程和发展,用R语言探索数据科学(2026年版)
  • 手把手教你用QT5和libmodbus模拟工业现场:一台PC同时扮演主机和多个从机
  • 深度解析 Go 编译器:优化 GC 三色标记法执行效率时的底层逻辑
  • 2026甘肃手工板厂家选型指南:银川净化板/青海净化板/兰州中空玻镁净化板/兰州中空玻镁岩棉净化板/兰州净化板生产厂家/选择指南 - 优质品牌商家
  • Arco Design Mobile:构建现代化移动应用的终极指南
  • 华为AP刷机避坑指南:Fit转Fat后,这些基础网络配置你做了吗?(以AP3010DN-V2为例)
  • 无需下载PS,用快马AI五分钟生成你的第一个网页设计原型
  • 用GPT-4自动化构建Plotly时间范围滑块可视化
  • Mythos能力解析:隐性知识建模与动态前提图谱技术
  • 企业微信 SCRM 私有化部署全解析:2026 年费用、定制开发与数据安全指南 - 资讯纵览
  • 多维聚合中的数据变形:维度对齐、度量归一化与后变形三步法
  • 2026兰州工业平开门厂家评测:甘肃工业门、兰州人行通道闸、兰州伸缩门、兰州保温卷帘门、兰州卷帘门、兰州工业厂房门选择指南 - 优质品牌商家
  • 北京离婚财产分割纠纷不好解决怎么办?2026年北京这5家离婚律师推荐 - 本地品牌推荐
  • Jekyll-theme-H2O终极配置教程:从零到一打造专业博客