Java后端开发day36--源码解析:HashMap

请添加图片描述
(以下内容均来自上述课程)
在这里插入图片描述

1. HashMap(一)

底层:数组+链表+红黑树

1.1 前提准备

查看源码:选中HashMap–ctrl+B
小细节:快捷键ctrl+f12–跳出目录结构

  • 蓝色圆圈:class 证明是类名
  • 粉色圆圈: method 证明是方法
  • 方法名和类名相同就证明是构造方法
  • 方法名和类名不相同就证明是普通的成员方法
  • 组成:粉色圆圈+方法名+括号内形参+:后返回值+灰色箭头
  • 灰色箭头:⬆️:重写父类或者接口中的方法 + 父类或接口的名称
  • 灰色箭头:➡️:如果方法本身就是灰色就会出现右箭头,表示直接继承箭头后面的方法,会直接跳转到后面的方法

请添加图片描述

  • 黄色圆圈:field 表示类的属性:成员变量或者常量
  • 绿色圆圈:interface 表示接口
  • 再往下的蓝色圆圈:大类(HashMap)中的内部类

请添加图片描述

1.2 Node节点—>链表

请添加图片描述

1.3 TreeNode---->红黑树

请添加图片描述

1.4 table---->数组

里面装的元素就是Node的对象
请添加图片描述
数组长度:默认16
加载因子:默认0.75
请添加图片描述

1.5 构造方法

1.5.1 空参构造–>加载因子0.75

此时底层数组还没有创建,
请添加图片描述
添加元素时,数组才会被创建。
形参:哈希值,键,值,当前数据是否保留(false是覆盖不保留),不重要
请添加图片描述
请添加图片描述

2. HashMap(二)

请添加图片描述
数组内部的键值对对象分为两种情况:链表或者红黑树

2.1 添加对象

请添加图片描述

2.1.1 put方法(添加元素)源码

请添加图片描述
牵连到下述:

2.1.2 哈希值

请添加图片描述

2.1.3 putVal方法源码

变量:
请添加图片描述
语句:
请添加图片描述
变量:
请添加图片描述

(1) 添加第一个元素的过程:数组位置为null

请添加图片描述
请添加图片描述

(2) 添加其他的元素

请添加图片描述

(2.1) 数组的位置不为null,键不重复,挂在下面形成链表或者红黑树

在这里插入图片描述

请添加图片描述
请添加图片描述

(2.2)数组的位置不为null,键重复,元素覆盖

请添加图片描述
444被覆盖为555,只修改了数据
请添加图片描述
请添加图片描述

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

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

相关文章

RT-Thread学习笔记(四)

RT-Thread学习笔记 线程间同步信号量信号量的使用和管理动态创建信号量静态创建信号量获取信号量信号量同步实列互斥量互斥量的使用和管理互斥量动态创建互斥量静态创建互斥量获取和释放互斥量实例事件集事件集的使用和管理动态创建事件集静态初始化事件集发送和接收事件事件集…

element ui el-col的高度不一致导致换行

问题:ell-col的高度不一致导致换行,刷新后审查el-col的高度一致 我这边是el-col写的span超过了24,自行换行,测试发现初次进入里面的高度渲染的不一致,有的是51px有的是51.5px 问题原因分析 Flex布局换行机制 Elemen…

现代化Android开发:Compose提示信息的最佳封装方案

在 Android 开发中,良好的用户反馈机制至关重要。Jetpack Compose 提供了现代化的 UI 构建方式,但提示信息(Toast/Snackbar)的管理往往显得分散。本文将介绍如何优雅地封装提示信息,提升代码可维护性。 一、基础封装方案 1. 简单 Snackbar …

【C++语法】类和对象(2)

4.类和对象(2) 文章目录 4.类和对象(2)类的六个默认成员函数(1)构造函数:构造函数特点含有缺省参数的构造函数构造函数特点(续)注意事项构造函数补充 前面总结了有关对象概念,对比 C…

【自然语言处理与大模型】vLLM部署本地大模型②

举例上一篇文章已经过去了几个月,大模型领域风云变幻,之前的vLLM安装稍有过时,这里补充一个快速安装教程: # 第一步:创建虚拟环境并激活进入 conda create -n vllm-0.8.4 python3.10 -y conda activate vllm-0…

26 Arcgis软件常用工具有哪些

一、画图改图工具(矢量编辑)‌ ‌挪位置工具(移动工具)‌ 干哈的?‌选中要素‌(比如地块、道路)直接拖到新位置,或者用坐标‌X/Y偏移‌批量移动,适合“整体搬家”。 ‌磁…

QNX/LINUX/Android系统动态配置动态库.so文件日志打印级别的方法

背景 通常我们会在量产的产品上,配置软件仅打印少量日志,以提升产品的运行性能。同时我们要考虑预留方法让软件能够拥有能力可以在烧录版本后能够通过修改默写配置,打印更多日志。因为量产后的软件通常开启熔断与加密,不能够轻松…

WebGL图形编程实战【4】:光影交织 × 逐片元光照与渲染技巧

现实世界中的物体被光线照射时,会反射一部分光。只有当反射光线进人你的眼睛时,你才能够看到物体并辩认出它的颜色。 光源类型 平行光(Directional Light):光线是相互平行的,平行光具有方向。平行光可以看…

【Hive入门】Hive基础操作与SQL语法:DDL操作全面指南

目录 1 Hive DDL操作概述 2 数据库操作全流程 2.1 创建数据库 2.2 查看数据库 2.3 使用数据库 2.4 修改数据库 2.5 删除数据库 3 表操作全流程 3.1 创建表 3.2 查看表信息 3.3 修改表 3.4 删除表 4 分区与分桶操作 4.1 分区操作流程 4.2 分桶操作 5 最佳实践与…

YOLO数据处理

YOLO(You Only Look Once)的数据处理流程是为了解决目标检测领域的核心挑战,核心目标是为模型训练和推理提供高效、规范化的数据输入。其设计方法系统性地解决了以下关键问题,并对应发展了成熟的技术方案: 一、解决的问…

Ubuntu-Linux中vi / vim编辑文件,保存并退出

1.打开文件 vi / vim 文件名(例: vim word.txt )。 若权限不够,则在前方添加 sudo (例:sudo vim word.txt )来增加权限; 2.进入文件,按 i 键进入编辑模式。 3.编辑结…

PCL绘制点云+法线

读取的点云ASCII码文件&#xff0c;每行6个数据&#xff0c;3维坐标3维法向 #include <iostream> #include <fstream> #include <vector> #include <string> #include <pcl/point_types.h> #include <pcl/point_cloud.h> #include <pc…

如何在学习通快速输入答案(网页版),其他学习平台通用,手机上快速粘贴

目录 1、网页版&#xff08;全平台通用&#xff09; 2、手机版&#xff08;学习通&#xff0c;其他平台有可能使用&#xff09; 1、网页版&#xff08;全平台通用&#xff09; 1、首先CtrlC复制好答案 2、在学习通的作业里输入1 3、对准1&#xff0c;然后鼠标右键 &#xff…

002 六自由度舵机机械臂——姿态解算理论

00 DH模型的核心概念 【全程干货【六轴机械臂正逆解计算及仿真示例】】 如何实现机械臂的逆解计算-机器谱-robotway DH模型是机器人运动学建模的基础方法&#xff0c;通过​​四个参数​​描述相邻关节坐标系之间的变换关系。其核心思想是将复杂的空间位姿转换分解为绕轴旋转…

pymongo功能整理与基础操作类

以下是 Python 与 PyMongo 的完整功能整理&#xff0c;涵盖基础操作、高级功能、性能优化及常见应用场景&#xff1a; 1. 安装与连接 (1) 安装 PyMongo pip install pymongo(2) 连接 MongoDB from pymongo import MongoClient# 基础连接&#xff08;默认本地&#xff0c;端口…

Trae+DeepSeek学习Python开发MVC框架程序笔记(四):使用sqlite存储查询并验证用户名和密码

继续通过Trae向DeepSeek发问并修改程序&#xff0c;实现程序运行时生成数据库&#xff0c;用户在系统登录页面输入用户名和密码后&#xff0c;控制器通过模型查询用户数据库表来验证用户名和密码&#xff0c;验证通过后显示登录成功页面&#xff0c;验证失败则显示登录失败页面…

如何识别金融欺诈行为并进行分析预警

金融行业以其高效便捷的服务深刻改变了人们的生活方式。然而,伴随技术进步而来的,是金融欺诈行为的日益猖獗。从信用卡盗刷到复杂的庞氏骗局,再到网络钓鱼和洗钱活动,金融欺诈的形式层出不穷,其规模和影响也在不断扩大。根据全球反欺诈组织(ACFE)的最新报告,仅2022年,…

纷析云:开源财务管理软件的创新与价值

在企业数字化转型中&#xff0c;纷析云作为一款优秀的开源财务管理软件&#xff0c;正为企业财务管理带来新变革&#xff0c;以下是其核心要点。 一、产品概述与技术架构 纷析云采用微服务架构&#xff0c;功能组件高内聚低耦合&#xff0c;可灵活扩展和定制。前端基于现代框…

蛋白质大语言模型ESM介绍

ESM(Evolutionary Scale Modeling)是 Meta AI Research 团队开发的一系列用于蛋白质的预训练语言模型。这些模型在蛋白质结构预测、功能预测和蛋白质设计等领域展现出了强大的能力。以下是对 ESM 的详细介绍: 核心特点 大规模预训练:基于大规模蛋白质序列数据进行无监督学…

OpenCv高阶(七)——图像拼接

目录 一、图像拼接的原理过程 1. 特征检测与描述&#xff08;Feature Detection & Description&#xff09; 2. 特征匹配&#xff08;Feature Matching&#xff09; 3. 图像配准&#xff08;Image Registration&#xff09; 4. 图像变换与投影&#xff08;Warping&…