HashSet
HashSet集合底层采取哈希表存储数据
哈希表是一种对于增删改查数据性能都较好的结构
hashCode方法和equals方法的配合流程
当添加对象的时候,会先调用对象的hashCode方法计算出一个应该存入的索引位置,查看该位置上是否存在元素
不存在:直接存
存在:调用equlas方法比较内容
false:存
true:不存
@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age && Objects.equals(name, student.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}
hashCode方法介绍
哈希值
是JDK根据某种规律算出来的int类型的整数
hashCode方法改造
重写hashCode方法
根据对象的属性值计算出的哈希值
Hashset原理解析
Hashset的添加过程
底层结构:哈希表(数组,链表,红黑树的结合体)
1.创建HashSet集合,内部会存在一个长度为16个大小的数组
2.调用的添加方法,会拿着对象的hashCode方法计算出应存入的索引位置(哈希值%数组长度)
3.判断索引位置元素是否是null
是:存入 不是:说明有元素,调用equals方法比较内容
对哈希值扰动,进行二次哈希操作,可以一定程度的减少链表挂载的数量
如何能够提高查询性能?
1.扩容数组
扩容数组的条件:
A:当数组中的元素个数达到16*0.75(加载因子)=12
扩容原数组2倍的大小
B:链表挂载的元素超过8(阈值)个,并且数组长度没有超过64
2.链表转红黑树
链表挂载的元素超过了8(阈值)个,并且数组长度到达了64
总结:
1.set集合的底层原理是什么样的
JDK8之前,哈希表:底层使用数组+链表组成
JDK8之后,哈希表:底层采用数组+链表+红黑树组成
2.哈希表的详细流程
1.创建一个默认长度16,默认加载因子为0.75的数组,数组名table
2.根据元素的哈希值跟数组的长度计算出应存入的位置
3.判断当前位置是否为null,如果是null直接存入,如果位置不为null,表示有元素,则调用equals方法比较属性值,如果一样,则不存,如果不一样,则存入数组
4.当数组存满到16*0.75=12时,就会自动扩容,每次扩容原先的两倍
5.当链表挂载元素超过8个(阈值)
检查数组长度:
没有到达64,扩容数组
到达了64,会转换为红黑树

相关文章:
HashSet
HashSet集合底层采取哈希表存储数据 哈希表是一种对于增删改查数据性能都较好的结构 hashCode方法和equals方法的配合流程 当添加对象的时候,会先调用对象的hashCode方法计算出一个应该存入的索引位置,查看该位置上是否存在元素 不存在:直接存…...
Java-继承和多态(下)
补全构造方法 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);while (scanner.hasNextInt()) {int x scanner.nextInt();int y scanner.nextInt();int z scanner.nextInt();Sub sub new…...
Docker搭建并配置Prometheus
首先确保Linux已安装Docker,如未安装请先参考:Linux安装Docker 1.安装准备 创建挂载目录 /opt/prometheus/data目录,准备用来挂载放置prometheus的数据 /opt/prometheus/config目录,准备用来放置prometheus的配置文件 /opt/pro…...
“解放 Arweave“优惠:4EVERLAND的无缝上传教程
为了进一步展示 Arweave 的能力,4EVERLAND 骄傲地推出了“解放 Arweave”活动。我们认识到 Arweave 在数据完整性、抗审查性以及长期保存方面的无与伦比的优势,因此我们与这个去中心化的存储巨头建立了强大的集成。 克服了过去与加密货币支付逻辑相关的…...
系统学习Linux-LVS集群
集群概述 负载均衡技术类型 四层负载均衡器 也称为 4 层交换机,主要通过分析 IP 层及 TCP/UDP 层的流量实现基于 IP 加端口的负载均衡,如常见的 LVS、F5 等; 七层负载均衡器 也称为 7 层交换机,位于 OSI 的最高层,即…...
使用matplotlib绘制动图
主程序如下: 项目:701项目三分报告 作者:WN 内容:速度障碍法实现 时间:2023年8月26号import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotlib import animation from utils import *uav1 Agen…...
加油站ai视觉分析检测预警
加油站ai视觉分析预警系统通过yolov8图像识别和行为分析,加油站ai视觉分析预警算法识别出打电话抽烟、烟火行为、静电释放时间是否合规、灭火器摆放以及人员工服等不符合规定的行为,并发出预警信号以提醒相关人员。YOLOv8 的推理过程和 YOLOv5 几乎一样&…...
Docker构建镜像
Docker根据Dockerfile文件构建镜像 在实际生产中,常常使用Dockerfile构建企业级生产环境镜像,然后再部署在我们的生产环境中,本文将从从零开始介绍Dockerfile如何使用,构建镜像。 Dockerhub官网地址:https://registry.hub.docke…...
【太多网工对NAT还存在这4种误解!你是其中一个吗?】
NAT是解决公网地址不够用大家最熟悉的网络技术之一,而NAT最依赖的是NAT translation表项,至于NAT的概念和背景这里不再解释,网络上有很多关于此的类似介绍,自己搜索即可。下面主要是针对大家对NAT的一些误解进行分析。 1 误解一…...
React钩子函数之useEffect,useLayoutEffect与useInsertionEffect的区别
React钩子函数在React开发中扮演着非常重要的角色。其中,useEffect、useLayoutEffect和useInsertionEffect是三个常用的钩子函数,它们的作用虽然有些相似,但是也存在一些区别。在本文中,我们将详细介绍这三个钩子函数的区别&#…...
Unity——后期处理举例
Post Processing(后期处理)并不属于特效,但现代的特效表现离不开后期处理的支持。本文以眩光(Bloom)为例,展示一种明亮的激光的制作方法 1、安装后期处理扩展包 较新的Unity版本已经内置了新版的后期处理扩…...
PMP P-05 Quality Management
质量管理...
vue中css修改滚动条样式
vue中css修改滚动条样式 效果图: 代码(在app.vue中全局增加下面样式即可): &::-webkit-scrollbar {width: 8px;height: 8px;border-radius: 3px;}/*定义滚动条轨道 内阴影圆角*/&::-webkit-scrollbar-track {//-webkit-box-shadow: inset 0 0 …...
uniapp的H5实现图片长按保存
实现图片预览 使用uniapp的api实现图片预览,可以缩放,关闭等操作 uni.previewImage({urls:[imageUrl],success:()>{this.controllTouch();} }) imageUrl是图片地址,如https://www.111.com/abc/image.png urls是字符串数组,…...
Java 8:Stream API 流式操作(学习)
Java 8:Stream API Java 8 中的 Stream API 是一组用于对集合数据进行处理的新特性;提供一种以声明式风格对集合进行操作的方式,简化集合的处理,使得代码更加简洁、优雅,并且能够更高效地处理数据; 这种风格…...
04_20 直接使用代码 创建内核模块获取物理内存信息
好像和 free得出来有关 和/proc/meminfo 有关 但是下面是全部的物理页 #include <linux/version.h> #include <linux/module.h> #include <linux/init.h> #include <linux/mm.h>//下面宏表示物理内存空间起始地址 对应页帧号 #define ARCH_PFN_OFFSET…...
<C++> STL_list
1.list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素和后一个元素。list与…...
聚类分析 | MATLAB实现基于FCM模糊C均值聚类结果可视化
聚类分析 | MATLAB实现基于FCM模糊C均值聚类结果可视化 目录 聚类分析 | MATLAB实现基于FCM模糊C均值聚类结果可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 FCM模糊C均值聚类,聚类结果可视化,MATLAB程序。 FCM(Fuzzy C-Means&a…...
C++笔记之设计模式:setter函数、依赖注入
C笔记之设计模式:setter函数、依赖注入 参考笔记: 1.C笔记之静态成员函数可以在类外部访问私有构造函数吗? 2.C笔记之设计模式:setter函数、依赖注入 3.C笔记之两个类的实例之间传递参数——通过构造函数传递类对象的方法详细探究…...
Spring MVC详解
文章目录 一、SpringMVC1.1 引言1.2 MVC架构1.2.1 概念1.2.2 好处 二、开发流程2.1 导入依赖2.2 配置核心(前端)控制器2.3 后端控制器2.4 配置文件2.5 访问 三、接收请求参数3.1 基本类型参数3.2 实体收参【重点】3.3 数组收参3.4 集合收参 【了解】3.5 路径参数3.6 中文乱码 四…...
企业级微服务架构解决方案:Abp Vnext Pro框架的5大技术优势解析
企业级微服务架构解决方案:Abp Vnext Pro框架的5大技术优势解析 【免费下载链接】abp-vnext-pro Abp Vnext 的 Vue 实现版本 项目地址: https://gitcode.com/gh_mirrors/ab/abp-vnext-pro Abp Vnext Pro是一个基于ABP框架和Vue.js技术栈构建的企业级开发平台…...
NebulaGraph Console终极指南:简单快速掌握图数据库命令行工具
NebulaGraph Console终极指南:简单快速掌握图数据库命令行工具 【免费下载链接】nebula-console Command line interface for the Nebula Graph service 项目地址: https://gitcode.com/gh_mirrors/ne/nebula-console NebulaGraph Console是NebulaGraph图数据…...
ARMv8通用定时器架构与CNTHP_CTL_EL2寄存器详解
1. AArch64通用定时器架构概述在ARMv8架构中,通用定时器系统为操作系统和应用程序提供了精确的时间基准。这套计时系统由一组相互关联的组件构成,包括物理计数器、虚拟计数器以及多个比较器。作为系统程序员,理解这套机制对开发底层系统软件至…...
警惕AI领域未经证实的技术传闻与虚构命名
我不能按照您的要求生成关于“TAI #200: Anthropic’s Mythos Capability Step Change and Gated Release”的博文内容。原因如下:该标题中出现的“Mythos”并非 Anthropic 官方公开发布或确认存在的模型、能力或产品名称。截至2024年7月,Anthropic 官方…...
Unity节点化效率工具:ComfyUI范式赋能中大型项目开发
1. 这不是又一个“UI美化插件”,而是Unity开发者每天要敲十次的底层效率杠杆Efficiency Nodes ComfyUI——光看名字,很多人第一反应是“ComfyUI?那不是Stable Diffusion的可视化工作流工具吗?怎么跑Unity里来了?”这恰…...
POLYGON Military资源包:军事仿真级3D资产的精度逻辑与战术应用
1. 这个资源包不是“拿来就能用”的万能钥匙,而是军事仿真级资产的起点你刚在Unity Asset Store页面看到POLYGON Military资源包封面——几辆写实风格的装甲车停在沙尘弥漫的战壕边,一个全副武装的士兵正蹲姿持枪警戒,远处是半坍塌的混凝土掩…...
奇迹 MU 荣耀出征 新区开区 最新地址官方正版下载
《奇迹 MU 荣耀出征》是正版授权的复古魔幻 MMORPG 手游,完美复刻端游 1.03H 黄金版本核心玩法,逐光娱手游官网https://www.gw648.com提供官方正规下载渠道,带你重回艾瑞西亚大陆,再续荣耀传奇。 官方正版下载渠道 《奇迹 MU 荣耀…...
2026年JAVA语言前端还可以学吗?是否还能找到好工作?
因为Java并不是前端语言。前端开发主要用的是 HTML、CSS、JavaScript/TypeScript,以及 React、Vue 等框架。可能您是混淆了 Java 和 JavaScript,或者想问的是“学 Java 还能找到好工作吗?前端还能学吗?” 下面我分开讲清楚&#x…...
TVA:打通数字AI到物理AI的关键桥梁(系列)
重磅预告:本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容,该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...
如何用openpilot升级你的驾驶体验:让300+车型秒变智能座驾
如何用openpilot升级你的驾驶体验:让300车型秒变智能座驾 【免费下载链接】openpilot openpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300 supported cars. 项目地址: https://gitcode.com/GitHub_Tren…...
