java高级——Collection集合之Set探索(底层为HashMap实现)

news2024/11/13 16:03:18

java高级——Collection集合之Set探索

  • 前情提要
  • 文章介绍
  • 继承结构
  • 底层代码(一张图你就悟了)
  • 下期预告

前情提要

   上一篇文章我们探索了HashMap,详细解说了哈希冲突,红黑树以及Map底层到底是怎么实现的,这一篇我们简单说一下HashSet,为什么要说简单说一下,因为HashSet的底层就是HashMap,只要你读懂了Map,Set说实话只需要简单看一下。

java高级——Collection集合之Map探索(包含红黑树,Map的底层实现原理及相关类如LinkedHashMap等多中介绍,满满的干货)

文章介绍

在这里插入图片描述

   这一篇我们看的是单列集合中的Set,那么上一篇说了Set底层是Map,不能光说不练,还是得简单看一下为什么底层是Map,总归来说有一丢丢不一样,如果没有看过Map底层的伙伴,一定要提前看一下Map好吧,因为Set确实没有什么值得研究的代码,只是看一下大致结构。

继承结构

在这里插入图片描述

   看起来继承结构挺复杂的吧,归到底除了克隆,序列化和一些必须的集合接口就没了,乍一看继承结构是和Map没有什么关系的,没什么关系,继续往下看。

底层代码(一张图你就悟了)

在这里插入图片描述

   来吧兄弟们看一下,HashSet的构造方式是一个HashMap,你还能说底层不是Map吗?构造方法基本是和Map一致的,这里我们说下底层存储稍有不一样的地方,先来说一下这几个常量的作用。

  • private transient HashMap<E,Object> map;(存储数据的map)
    
  • private static final Object PRESENT = new Object();(Map中value的值,固定为一个空对象且为final,不会占用内存)
    

   不一样的地方可能就是添加元素的那里,首先我们要知道,Map的key本身就是不允许重复的,所以这也就是Set不可重复的缘由,而且Set是可以允许null的,因为Map中也可以存在Key为null的元素,这样说就可以说得通了。

在这里插入图片描述

   注意看上面这张图,每次添加元素的时候,调用的是Map的put方法,而key就是我们要存储到Set的元素value则是上面说的空对象,但实际都是一个内存地址,不会占用内存,这也是两者不同的地方吧。

   关于LinkedHashSet和TreeSet也就不必多说了,看下图就行了,底层都是Map,LinkedListHashSet的源码更是简单,只是调用了HashSet的构造方法,仅此而已,啥都没有,所以说兄弟们,一定要学习好Map,不懂的看一下我之前发布的那篇博客三万字,颤抖吧

在这里插入图片描述

下期预告

   关于java集合的这一大类算是结束了,下一篇冲击java的异常家族,期待下次见面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1940272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三字棋游戏(C语言详细解释)

hello&#xff0c;小伙伴们大家好&#xff0c;算是失踪人口回归了哈&#xff0c;主要原因是期末考试完学校组织实训&#xff0c;做了俄罗斯方块&#xff0c;后续也会更新&#xff0c;不过今天先从简单的三字棋说起 话不多说&#xff0c;开始今天的内容 一、大体思路 我们都知…

开源模型应用落地-FastAPI-助力模型交互-进阶篇-RequestDataclasses(三)

一、前言 FastAPI 的高级用法可以为开发人员带来许多好处。它能帮助实现更复杂的路由逻辑和参数处理&#xff0c;使应用程序能够处理各种不同的请求场景&#xff0c;提高应用程序的灵活性和可扩展性。 在数据验证和转换方面&#xff0c;高级用法提供了更精细和准确的控制&#…

Springcloud之gateway的使用详解

官网地址&#xff1a;https://docs.spring.io/spring-cloud-gateway/docs/4.0.4/reference/html/ 1.网关入门 helloword 网关不依赖start-web 导入的pom&#xff1a; <!--gateway--> <dependency><groupIdorg.springframework.cloud</groupId><arti…

CKS-Kubernetes-证书题库总结

证书如下 个人考试总结 第一次考试 成绩如下&#xff0c;其实这一次我题目全做了&#xff0c;个人感觉也没有什么错误&#xff0c;但是环境做错了 7月14日CKS考试笔记 问题分析 你这次考试得了57%。 至少需要67%的分数才能通过。 对您完成的考试的自动分析显示了三个得分最…

【深度学习】起源:人脑的神经结构

文章目录 睁眼看世界&#xff0c;倾耳听人间脑子&#xff0c;是个好东西&#xff01;眼睛成像其它身体感触系统脑子&#xff1a;我很忙的&#xff01;脑细胞&#xff1a;脑子里的打工人生物神经元——结构生物神经元——人脑的运算单位 人脑的深度学习总结 睁眼看世界&#xff…

数据结构 —— B树

数据结构 —— B树 B树B树的插入操作分裂孩子分裂父亲分裂 我们之前学过了各种各样的树&#xff0c;二叉树&#xff0c;搜索二叉树&#xff0c;平衡二叉树&#xff0c;红黑树等等等等&#xff0c;其中平衡二叉树和红黑树都是控制树的高度来控制查找次数。 但是&#xff0c;这都…

李彦宏论AI:技术革新与产业价值的双重驱动

文章目录 每日一句正能量前言AI技术应用场景探索1. **医疗健康**2. **自动驾驶**3. **工业制造**4. **金融服务**5. **教育**6. **农业**7. **环境监测**8. **安全监控**9. **零售业**10. **艺术与娱乐** 避免超级应用陷阱的策略1. **明确应用目标**2. **优化用户体验**3. **注…

NFT革命:数字资产的确权、营销与元宇宙的未来

目录 1、NFT&#xff1a;数字社会的数据确权制度 2、基于低成本及永久产权的文化发现 3、PFP&#xff1a;从“小图片”到“身份表达”&#xff0c;再到社区筛选 4、透明表达&#xff1a;NFT 在数字化营销中的商业价值 5、可编程性&#xff1a;赋予 NFT 无限可能的应用 5.…

/秋招突击——7/21——复习{堆——数组中的第K大元素}——新作{回溯——全排列、子集、电话号码的字母组合、组合总和、括号生成}

文章目录 引言复习数组中的第K大的最大元素复习实现参考实现 新作回溯模板46 全排列个人实现参考实现 子集个人实现参考实现 电话号码的字母组合复习实现 组合总和个人实现参考实现 括号生成复习实现 总结 引言 昨天的科大讯飞笔试做的稀烂&#xff0c;今天回来好好练习一下&a…

git实操之线上分支合并

线上分支合并 【 1 】本地dev分支合并到本地master上 # 本地dev分支合并到本地master上# 远程(线上)分支合并# 本地dev分支合并到本地master上# 远程(线上)分支合并#####本地和线上分支同步################ #### 远程创建分支&#xff0c;拉取到本地####-远程创建分支&#…

服务攻防-应用协议cve

Cve-2015-3306 背景&#xff1a; ProFTPD 1.3.5中的mod_copy模块允许远程攻击者通过站点cpfr和site cpto命令读取和写入任意文件。 任何未经身份验证的客户端都可以利用这些命令将文件从文件系统的任何部分复制到选定的目标。 复制命令使用ProFTPD服务的权限执行&#xff0c;…

《2024 年 7 月 17 日最新开发者服务 API 推荐》

在当今的数字货币领域&#xff0c;对代币持有信息的精准洞察至关重要。而 Bitquery 代币持有信息查询 API 接口的出现&#xff0c;为开发者和投资者提供了强大的工具。无论是想要揭示代币趋势&#xff0c;检测虚假交易&#xff0c;发现热门代币&#xff0c;还是评估代币财富差距…

查找算法③-斐波那契查找算法/黄金分割查找算法

一、算法原理 斐波那契查找算法又称黄金分割查找算法&#xff0c;它是在二分查找基础上根据斐波那契数列进行分割的一种衍生算法&#xff0c;简单来说&#xff0c;二分查找是一分为二进行查找&#xff0c;斐波那契查找是使用斐波那契数列进行分割查找。而斐波那契数列就是我们通…

【Dison夏令营 Day 26】PyGame 中的赛车游戏

在本文中&#xff0c;我们将了解如何使用 Pygame 在 Python 中创建一个赛车游戏。在这个游戏中&#xff0c;我们将拥有驾驶、障碍物碰撞、通过关卡时速度增加、暂停、倒计时、记分牌和说明书屏幕等功能。 所需模块&#xff1a; 在继续之前&#xff0c;请在命令提示符下运行以下…

百科词条可以删除吗?删除百科词条的方法

大多时候大家都是想创建百度词条&#xff0c;然而有时候也会需要删除某些词条&#xff0c;因为其内容有错误、不实或者涉及某些敏感信息。但是百科词条删除需要非常明确的理由&#xff0c;不然也是很难通过的&#xff0c;这里小马识途百科顾问先初步分享下删除百科词条的流程。…

一套C#语言开发的医学影像归档与通讯系统PACS源码,三甲以下医院都能满足

医学影像归档与通讯系统&#xff08;PACS&#xff09;系统&#xff0c;是一套适用于从单一影像设备到放射科室、到全院级别等各种应用规模的医学影像归档与通讯系统。PACS集患者登记、图像采集、存档与调阅、报告与打印、查询、统计、刻录等功能为一体&#xff0c;有效地实现了…

Logstash docker发布

一 下载Logstash 不废话了&#xff0c;我下载的7.17.6 二 新增配置文件 在logstash/pipeline中&#xff0c;添加logstash.conf input {jdbc { # 连接jdbc_connection_string > "jdbc:mysql://192.168.1.1:3306/kintech-cloud-bo&#xff1f;characterEncodingUTF-8&…

【Linux网络】套接字编程

本篇博客整理了 socket 套接字编程的相关内容&#xff0c;包括 socket 网络通信原理、socket 相关的系统调用接口等&#xff0c;分别演示了基于UDP协议、TCP协议的 socket 网络编程&#xff0c;旨在让读者更加深入理解网络通信原理和设计&#xff0c;对网络编程有初步的认识和掌…

ECCV2024中有哪些值得关注的扩散模型相关的工作?

Diffusion Models专栏文章汇总:入门与实战 The Fabrication of Reality and Fantasy: Scene Generation with LLM-Assisted Prompt Interpretation 本文探讨了如何利用扩散模型生成需要艺术创造力或专业知识的复杂和富有想象力的图像提示。提出了一个新颖的评估框架RealisticF…

VulnHub:insomnia

靶机下载地址 信息收集 主机发现和端口扫描 攻击机网段192.168.31.0/24。 # 主机发现 nmap 192.168.31.0/24 -Pn -T4 # 靶机ip:192.168.31.207 端口扫描 nmap 192.168.31.207 -A -p- -T4 经过nmap扫描发现目标主机有http服务&#xff0c;端口是8080。 目录扫描 访问http…