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

Java HashSet 的实现原理

概述

HashSet集合中的每个元素,其实都被作为HashMap的key存放到了HashMap中,从而保证HashSet集合的不可重复性。对于HashMap来说,它的put方法设定了key重复时的逻辑。如果重复,则会直接覆盖key对应的value,如果不重复,则直接作为HashMap实例的一个key而被存放其中。

源码解析

Set set = new HashSet();

看java.util.HashSet#HashSet()。HashSet类实例初始化时会初始化这个map字段。

在这里插入图片描述

看看这个map字段的定义:

在这里插入图片描述

现在我们尝试存入3个元素到Set集合:

Set<String> set = new HashSet();
set.add("test1");
set.add("test2");
set.add("test3");
System.out.println(set);

看java.util.Set#add方法的内部:

在这里插入图片描述

这个字段是一个固定的对象。

在这里插入图片描述

现在看看,将元素add到Set集合后,此时这个map字段内容的变化:

在这里插入图片描述

可以看到元素都被加到HashMap实例的key中了。并且,此时的key,引用的都是堆中同一个的Object实例。

再看一下HashMap的put方法,看当put进同一个key的元素时,是如何处理的。相关源码如下所示。可以了解到,当key重复时,会直接覆盖或者保持原样。

在这里插入图片描述
然后再看下这个put方法返回的内容:

在这里插入图片描述

可以看到,如果当前put的key是新key,则返回null,反之则返回当前key原本被对应的value。

现在反过来最后再看下HashSet的add方法:

在这里插入图片描述

HashSet会通过HashMap的put接口返回的内容,来判断是否为重复添加。如果为true,则说明为新元素的添加,如果为false,则说明为重复元素的添加。所以,如果是重复元素的添加,并不会报错,只是会有一个状态位,true或者false,来判断是否为重复添加。

http://www.dtcms.com/a/477999.html

相关文章:

  • Happy DOM曝CVSS 9.4严重RCE漏洞,PoC已公开(CVE-2025-61927)
  • 关于网站建设的句子微营销app
  • 静态网站托管平台wordpress论坛源码
  • mac idea 解决properties文件乱码问题
  • IDEA 常用设置
  • 【XML】基础篇
  • 免费的企业建站系统网站上添加百度地图导航
  • Kernel Debugging Options
  • RoboTwin 2.0 测试ACT模型记录
  • tcpdump 抓包数据分析实战,命令、过滤、常见故障定位与真机补充流程
  • Maven的安装和配置以及IDEA的配置
  • 个人网站制作方法企业网站建设的作用
  • webchat单体版本启动文档记录和源码分享
  • 构建AI智能体:六十二、金融风控系统:基于信息熵和KL散度的异常交易检测
  • K8S master 节点IP变了导致访问失败
  • Golang协程
  • 深圳网站建设网站dw学生个人网页制作视频
  • 深度强化学习 | 基于SAC算法的动态避障(ROS C++仿真)
  • 智能美甲灯方案,UV/LED美甲光疗机美甲烤灯MCU控制方案开发设计
  • 用html5写一个可输入1-100行1-100列的矩阵计算器
  • 如何在第三方网站做推广湖北建设注册中心网站首页
  • 福州网站建设信息百度推广账号登陆入口
  • 纯知识干货java学习之问答一
  • L05_后端_MinIO 安装使用入门指南(实战版)
  • [ SpringBoot ]
  • Nginx 负载均衡调度算法
  • 全链路Controller压测负载均衡
  • FastCRUD:为 FastAPI 量身打造的现代化异步 CRUD 框架,让后端开发更高效
  • 宠物服务到店预约/宠物服务上门预约/商城零售o2o
  • 网站做推广企业wordpress最新模板