百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT文章 > 正文

Java(day67):深入解析 Java 中的 HashSet:高效存储与查找的奥秘

chenpack 2025-06-10 09:30 14 浏览 0 评论

集合篇-HashSet(JAVA)

前言

HashSet是Set接口的一个实现类,实际上它是hashMap的实例,不保证顺序,且非线程安全的。jdk文档中也足以说明这一点。而HashSet常用的方法有add, remove, contains和size。

案例使用

源码分析

1、new HashSet<>();

Java(day67):深入解析 Java 中的 HashSet:高效存储与查找的奥秘

// private transient HashMap map;
//这里也足以说明HashSet是个HashMap实例,那么是怎么实现的呢?
//下面会有分析
public HashSet() {
    map = new HashMap<>();
}

2、java.util.HashSet#add

//这里直接调用了map的put方法,e就是key
//那么PRESENT是啥?原来PRESENT=new Object
// private static final Object PRESENT = new Object();
public boolean add(E e) {
    return map.put(e, PRESENT)==null;
}

3、java.util.HashSet#remove

public boolean remove(Object o) {
    return map.remove(o)==PRESENT;
}

4、java.util.HashSet#contains

public boolean contains(Object o) {
    return map.containsKey(o);
}

5、java.util.HashSet#size

public int size() {
    return map.size();
}

6、java.util.HashSet#iterator

//说明迭代器是迭代了map的keySet
//从HashMap的源码分析可以知道,key是不可以重复的
//所以HashSet是不存在重复的值
public Iterator iterator() {
    return map.keySet().iterator();
}

总结

HashSet是HashMap的实例,HashSet存储的数据是不可重复的。且HashSet很多方法都直接调用HashMap的方法。HashSet的值是HashMap的key,而HashMap的值是一个Object。类似一个占位的作用。

喜欢这样做源码解析的同学,可以点赞、关注+收藏,后期还会推出其他框架源码分析。

如果有补充的地方,留言区见。

相关推荐

mysql多行合并成一行_mysql多行拼接

多行合并成一行sql函数group_concat和stuff一、MySQL中group_concat函数完整的语法如下:group_concat([DISTINCT]要连接的字段[OrderB...

pythonfor循环求1!+2!+3!+....+n!的和 python用循环求1到100的和

python经典案例:求1到之和问题:求1到之和方法1:利用循环求和#!/usr/bin/python#coding:utf-8#author:菜就多练呀total=0foriinran...

python批量查询备案号_python 批量查询

批量查询ip对应域名、备案信息、百度权重ip2domain-批量查询ip对应域名、备案信息、百度权重本工具二开自https://github.com/sma11new/ip2domain在批量挖S...

motionbuilder镜像动画 motionbuilder插件

如果把《哪吒2》制作全部交给AI《哪吒2》作为现象级动画电影,其成功确实依赖于产业链的高效协作。随着AI技术逐渐渗透动画制作全流程,未来动画产业将呈现"AI全链参与+人类创意主导"的深度融合模式。以下...

逻辑运算符、算术运算符、赋值运算符等等归纳

运算符(算术、比较、逻辑等)1、算数运算符如:a=,b=+加如:a+b=-减如:a-b=-乘如:a*b=/除如:a/b=%取余如:a/b=**幂x**y返回x的y次方,如...

如何生成HTML5页面代码_如何用html5制作一个网页

vscode快速生成html代码技巧快速生成Html5骨架在Html文件中输入html:5按下回车键,可快速生成HTML5页面模板:Docu...

国家海洋局第二海洋研究所(海洋二所)考研答疑

上海海洋大学发布年硕士研究生招生章程,来看详情→近日,上海海洋大学发布年硕士研究生招生章程一起来看看吧!一、学校简介上海海洋大学建校于年,是一所多科性应用研究型大学,是上海市人民政府与国家海洋局、农业...

vue-awesome-swiper轮播图实现

swiper在vue中正确的使用方法swiper是网页中非常强大的一款轮播插件,说是轮播插件都不恰当,因为它能做的事情太多了,swiper在vue下也是能用的,需要依赖专门的vue-swiper插件,...

yarn下载安装教程_yarn安装axios

yarn的安装和使用一、安装在windows下(1)下载node.js,使用npm安装npminstall-gyarn(2)查看版本yarn--versionYarn淘宝源安装&nbs...

freemodbus 主机源码 freemodbus stm32

STM32单片机移植FreeModbus详细过程modbus是一个非常好的串口协议(当然也能用在网口上),它简洁、规范、强大。可以满足大部分的工业、嵌入式需求。这里详细说下如何将freemodbus...

python if 多条件并列判断_python多个if并列怎么运行

pythonif多条件并列判断的三种方法pythonif多条件并列判断的三种方法如果使用python的if进行多个条件表达式的判断呢?下面介绍三种方法:使用and或or来连接多个条件表达式,比如条...

driver memory和executor memory怎么设置 memory odd ratio怎么设置

RocketMQ原理—2.源码设计简单分析一大纲1.NameServer的启动脚本2.NameServer启动时会解析哪些配置3.NameServer如何初始化Netty网络服务器4.NameServ...

FPGA编程架构_fpga的编程语言是什么

深入浅出带你了解FPGA架构数字集成电路有两种类型:ASIC和FPGA(现场可编程门阵列)。专用集成电路(ASIC)有一个预先定义的特定硬件功能,在生产后不能重新编程。但FPGA可以在制造后可无限编程...

Web端H.265播放器研发解密_h265 网页播放

海南车智易通申请支持H265编码格式的Web视频播放器优化专利,能够提升用户体验金融界年1月日消息,国家知识产权局信息显示,海南车智易通信息技术有限公司申请一项名为“一种支持H2...

java 为什么要用多线程_java为什么很少用多进程

Redis不是号称单线程效率也很高吗,为什么又采用多线程了?Redis是目前广为人知的一个内存数据库,在各个场景中都有着非常丰富的应用,前段时间Redis推出了的版本,在新版本中采用了多线程模型。因为...

取消回复欢迎 发表评论: