Java中关于HashSet常见问题

发布时间:2026/11/6 6:19:25

Java中关于HashSet常见问题 为什么两个 id 相同的 User能同时放进 HashSet先看一个常见问题User u1 new User(1, 张三); User u2 new User(1, 张三); SetUser set new HashSet(); set.add(u1); set.add(u2); System.out.println(set.size()); // 可能是 2明明是同一个人为什么没去重问题通常不在 Set而在 User 类只重写了hashCode()没重写equals()。一、Set 是怎么去重的Set 不允许重复元素但它不是一个个跟所有元素比那样太慢。它靠两步先用hashCode()算出位置再用equals()判断是不是真的重复。往 HashSet 里加元素时算出hashCode()找到对应位置位置是空的直接放位置有元素就用equals()比一下equals()返回true说明重复不添加equals()返回false说明不重复添加。一句话hashCode()负责快速找位置equals()负责最后确认是不是重复。二、为什么重写hashCode()必须重写equals()因为这两个方法要配合工作。如果只重写hashCode()不重写equals()equals()用的还是默认实现比较的是对象地址。于是u1和u2的 id 相同hashCode()相同会落到同一个位置但它们是两个不同对象默认equals()返回falseSet 认为它们不重复于是两个都存进去。结果就是id 相同的对象没能去重。在 HashMap 里也一样它们会被当成两个不同的 key。所以结论很简单重写hashCode()时要一起重写equals()并且用同一批字段来判断。三、哈希冲突是什么哈希函数是把很多输入映射到有限的位置上。位置只有那么多对象却可以有很多所以不同对象算出同一个哈希值很正常。这就是哈希冲突。冲突无法完全避免只能尽量分散。HashMap 和 HashSet 处理冲突的方式就是同一个位置挂链表链表太长再转红黑树。所以hashCode()相同不代表一定是同一个对象最后还要靠equals()确认。四、记住三句话Set 去重靠两步hashCode()定位equals()确认。重写hashCode()就要重写equals()两者逻辑要一致。哈希冲突是正常现象hashCode()相同不代表对象相同。
延伸阅读

更多相关文章

2026/11/6 6:19:25

Docker + IDEA 一键部署!

Docker IDEA 一键部署! 作为 3 Year全栈开发者相比对Docker一定很熟悉,镜像容器化技术,就不过多介绍了! 很久之前做的 Docker 入门学习Blog ,现在回头看发现有点过于臃肿,后期会总结一套常用命令&#x…

2026/11/6 8:14:32

VS Code核心架构与高效开发实践指南

1. Visual Studio Code 是什么? 第一次打开VS Code时,你可能和我当初一样疑惑:这个看似简单的编辑器,凭什么能在短短几年内成为全球开发者的首选工具?作为微软2015年推出的开源代码编辑器,VS Code完美平衡了…

2026/11/6 8:14:32

智能数据中心节能系统:算法预测与三维建模的融合应用

1. 项目背景与核心价值 现代数据中心机房作为数字基础设施的核心载体,其能耗问题日益突出。据统计,全球数据中心年耗电量已超过2000亿千瓦时,其中约40%的能耗来自制冷系统。传统机房控制系统往往采用固定阈值触发机制,存在响应滞后…

2026/11/6 8:14:32

3.12G C++手游源码拆解:从编译到联调的工程实践指南

1. 一套3.12G的手游全套源码到底包含什么第一次看到“精品手游全套源码工具源码,C源码,解压后3.12G”这个描述,很多人的第一反应是“捡到宝了”,第二反应是“从哪下手”。我接触过不少类似规模的游戏工程包,也帮朋友梳…

2026/11/6 8:14:32

Windows平台spdlog日志库编译与优化指南

1. 项目概述 在C开发领域,日志记录是每个项目都绕不开的基础功能。spdlog作为当前最受欢迎的C日志库之一,以其高性能、易用性和丰富的功能特性赢得了广大开发者的青睐。根据2023年Stack Overflow开发者调查,spdlog在C日志库中的使用率已经达到…

2026/11/6 8:14:32

TP-Link路由器WDS无线桥接配置指南

1. 无线桥接技术概述WDS(Wireless Distribution System)无线桥接技术是解决大范围无线覆盖的经济型方案。通过这项技术,我们可以将两台或多台无线路由器通过无线方式连接起来,扩展原有无线网络的覆盖范围。TP-Link作为家用路由器市…

2026/11/6 8:09:32

智慧住建一体化设计方案解析与关键技术实现

1. 智慧住建一体化设计方案概述在城市化进程加速的今天,住建领域面临着前所未有的挑战与机遇。某省市的智慧住建一体化设计方案,正是针对住建行业信息化建设中的痛点问题,提出的一套系统性解决方案。这个方案不是简单的技术堆砌,而…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/6 1:03:39

MCU晶振电路设计全解析:从负载电容计算到PCB布局调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑