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

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.mzph.cn/web/47539.shtml

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

相关文章

急性腹膜炎病人的护理

一、病情观察 对于急性腹膜炎病人&#xff0c;密切观察病情至关重要。要定时测量生命体征&#xff0c;包括体温、脉搏、呼吸和血压。例如&#xff0c;体温升高可能提示感染加重&#xff0c;脉搏加快可能意味着出现了休克的早期迹象。 观察病人的腹部症状&#xff0c;如腹痛的部…

图像生成(Text-to-Image)发展脉络

这篇博客对 图像生成&#xff08;image generation&#xff09; 领域的经典工作发展进行了梳理&#xff0c;包括重要的一些改进&#xff0c;目的是帮助读者对此领域有一个整体的发展方向把握&#xff0c;并非是对每个工作的详细介绍。 脉络发展&#xff08;时间顺序&#xff0…

为什么vue3项目中推荐使用const,而不是let语法

使用 const 而不是 let 主要有以下几个原因&#xff1a; 不可变性&#xff1a;const 声明的变量是只读的&#xff0c;这意味着它们的值不能被重新赋值。这有助于防止在组件的整个生命周期内不小心修改状态&#xff0c;从而使得状态管理更加安全。 单例性&#xff1a;使用 cons…

气膜工业仓储与气膜体育馆的配置区别—轻空间

气膜工业仓储和气膜体育馆在配置上有明显的区别&#xff0c;这主要是由于它们的使用功能和环境不同所导致的。 结构设计 气膜工业仓储&#xff1a; 主要设计为大跨度、大空间&#xff0c;以便容纳大量货物。 气膜体育馆&#xff1a; 设计注重支撑观众席、运动场地和相关设施&…

Golang | Leetcode Golang题解之第274题H指数

题目&#xff1a; 题解&#xff1a; func hIndex(citations []int) int {// 答案最多只能到数组长度left,right:0,len(citations)var mid intfor left<right{// 1 防止死循环mid(leftright1)>>1cnt:0for _,v:range citations{if v>mid{cnt}}if cnt>mid{// 要找…

MQTT 协议中 PUBLISH 和 PUBACK 介绍

MQTT 协议中 PUBLISH 和 PUBACK 介绍 1. PUBLISH 命令 功能 PUBLISH 命令用于从客户端向服务端&#xff08;或反向&#xff09;传输一个应用消息。它是 MQTT 协议中用于消息发布的核心命令。 语法 PUBLISH 报文由以下部分组成&#xff1a; 固定报头&#xff08;Fixed Hea…

One-Class SVM

前提知识&#xff1a;支持向量机&#xff08;SVM&#xff09;-CSDN博客 主要思想 找一个超平面将样本中的正例圈出来&#xff0c;预测就是用这个超平面做决策&#xff0c;在圈内的样本就认为是正样本&#xff0c;圈外的是其他样本&#xff0c;如图1所示&#xff1a; 图1 OSVM…

完整创建一个vite前端项目

目录 1.先创建一个vite项目 2.下载第三方依赖 ① 安装路由vue-router ② 安装vuex全局数据管理 ③ 安装element-plus ④ 安装element-plus图标 ⑤ 安装axios发送请求 ⑥ 完整main.js代码模板 3.开发组件 4.登陆页面开发用例 5. 完整项目代码 废话少说&#xff0c;直接…

【C#】| 与 及其相关例子

按位或&#xff08;|&#xff09; 按位或运算符 | 对两个数的每一位进行比较&#xff0c;如果两个数中至少有一个为 1&#xff0c;则结果位为 1&#xff1b;否则&#xff0c;结果位为0。 1010 (10 in decimal) | 1100 (12 in decimal) ------1110 (14 in decimal) 力扣相关…

【MySQL进阶之路 | 高级篇】EXPLAIN的进一步使用

1. EXPLAIN的四种输出格式 EXPLAIN可以输出四种格式&#xff1a;传统格式&#xff0c;JSON格式&#xff0c;TREE格式以及可视化输出。用户可以根据需要选择使用于自己的格式。 1). 传统格式 传统格式简单明了&#xff0c;输出是一个表格形式。 2). JSON格式 第一种格式中介…

联合体(union)的定义以及如何与结构体(struct)不同

联合体&#xff08;Union&#xff09;是一种特殊的数据类型&#xff0c;它允许在相同的内存位置存储不同的数据类型。但是&#xff0c;在任何给定的时间点&#xff0c;联合体只能存储其中的一个值&#xff1b;这意味着联合体的大小是其最大成员的大小&#xff0c;因为它必须足够…

分析Java中的@Transactional(readOnly = true)的作用(附Demo)

目录 前言1. 基本知识2. 性能对比 前言 对于Java的基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; 而对于Transactional的基本知识可看…

jstl是什么?

JSTL&#xff08;JavaServer Pages Standard Tag Library&#xff0c;Java 服务器页面标准标签库&#xff09;是一组用于简化 JSP 页面开发的标准标签和函数库。它提供了一组自定义的标签&#xff0c;使得开发者可以在 JSP 页面中使用这些标签来完成常见的任务&#xff0c;如条…

面向对象练习题

代码&#xff1a; public class LL {public static void main(String[] args) { Teacher tnew Teacher("Mike",32,"前端页面",20000);Professor P new Professor("Jack",58,"嵌入式开发",20000);pro p new pro("Bob",34,&q…

验证环境中uvm_error的使用

基本概念 作用&#xff1a;uvm_error 用于在验证过程中当发现不符合预期的情况时&#xff0c;生成并输出错误消息&#xff0c;帮助验证工程师快速定位和解决问题。语法&#xff1a;其基本语法为 uvm_error(ID, Message);&#xff0c;其中 ID 是一个唯一标识符&#xff0c;用于…

Leetcode热题100 Day4

开始做到二叉树了&#xff0c;前面的题全部用递归就能解决。 三十三、将有序数组转换为平衡二叉搜索树 二叉搜索树是左子树的值全小于根节点&#xff0c;右子树的值全大于根节点。二叉搜索树的中序遍历即为有序数组。但是有序数组和二叉搜索树是一一对应的吗&#xff1f;答案…

【规范】小程序发布,『小程序隐私保护指引』填写指南

前言 &#x1f34a;缘由 『小程序隐私保护指引』小程序发布&#xff0c;每次都躲不开&#xff01; &#x1f3c0;事情起因&#xff1a; 最近在帮朋友弄一个小项目&#xff0c;uniappunicloud壁纸小程序。虽然之前做过不少小程序&#xff0c;但是每次发布正式版本时都有一步『…

python入门课程Pro(2)--循环

循环 第1课 for循环的基本操作1.循环2.遍历3.for 循环遍历字典&#xff08;1&#xff09; 遍历字典的键(2)遍历字典的值(3)遍历字典的键和值 4.练习题&#xff08;1&#xff09;班级成绩单&#xff08;2&#xff09;最出名的城市&#xff08;3&#xff09;修改成绩&#xff08;…

WSL的安装

&#x1f3bc;个人主页&#xff1a;金灰 &#x1f60e;作者简介:一名简单的大一学生;易编橙终身成长社群的嘉宾.✨ 专注网络空间安全服务,期待与您的交流分享~ 感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持&#xff01;❤️ &#x1f34a;易编橙终身成长社群&#…

Python--递归与非递归遍历文件夹的方法

递归概念 递归是一种编程技术&#xff0c;允许函数调用自身来解决问题。设计递归函数时&#xff0c;需要考虑基本情况和递归步骤。 递归函数设计 基本情况&#xff1a;递归结束的条件。递归步骤&#xff1a;函数调用自身解决更小的子问题。 递归方法实现 import osdef get…