HashMap底层源码分析

news2025/2/24 10:28:35

文章目录

  • HashMap底层源码分析
  • 1.观察HashMap成员变量
    • 1.1 HashMap的主要成员变量
    • 1.2 HashMap的构造方法
    • 1.3 put方法

HashMap底层源码分析


前言 : 上文我们已经将哈希表学完了,下面就来简单的看一下源码,就结束我们的Map和Set 的学习

1.观察HashMap成员变量


这里我们ctrl + 鼠标左键进入到 HashMap的 源码

1.1 HashMap的主要成员变量

在这里插入图片描述

1.2 HashMap的构造方法

在这里插入图片描述


下面就来看 put 方法

1.3 put方法


图一 :
在这里插入图片描述


图二 : putVal 方法
在这里插入图片描述


这关于内存分配,还有一个面试题 下面来看看
在这里插入图片描述


此时这个面试问题就解决了, 下面再来看一个(这个问题已经再 上文讲过了)


面试题 : 讲一下你对hashcod 和 equels的区别

引用 上文的 图 :

在这里插入图片描述


此时就能够明显的知道 hashcod 将引用类型的数据计算成一个int 值,然后通过 hash函数计算出某个下标的, 这里如果出现计算出同一位置,即出现了哈希碰撞,那么我们就需要通过 equals 来确定当前的值是否相同, 如果相同更新val值, 不同直接插入到 链表的最后 (JDK 1.8 后使用的尾插法)、


面试题 : 当HashMap满的时候我们需要注意什么 ?

这里主要考查的不就是我们重新hash

这里需要重新调整HashMap的大小,就是将数组进行的特殊的扩容【将原先数组里的每一个下标底下的链表中每个节点重新哈希到新扩容后的链表中】,来确保 重新调用的HashMap,我们可以根据新的存储位置,找到我们原先的数据。


补充 : 在 putVal 的树化操作

在这里插入图片描述

这里 只是简单的看看 ,感兴趣可以自己去找找博客 。

最后补充一下我们hashMap的扩容是2倍扩容,本文完

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

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

相关文章

灰度级形态学 - 顶帽变换和底帽变换

目录 1. 介绍 2. 代码实现 1. 介绍 顶帽变换和底帽变换就是图像的加减和开闭运算的结合 顶帽变换的公式为:原图 - 原图的开运算 这里结合开运算的几何图形解释来介绍顶帽变换。 因为开运算是结构元从下往上推动的过程,所以会删除图像灰度值相对周围高…

Dom对象总结案例实操(第二十课)

Dom对象总结案例实操(第二十课) 今天文章有点长 第一部分:回顾之前Dom对象我用了四篇文章对他进行了分开讲述Dom对象的用途,今天用几个案例实操一下. 之前我们Dom对象中了解过下面的内容 Dom对象的定义?Dom对象的节点操作,了解到了父节点 子节点 第一个 子节点 最…

利用Postman测试全屋智能接口

文章目录一、Postman概述二、利用Postman测试全屋智能接口(一)移动应用开发平台API说明V2.0(二)下载Postman(三)启动Postman(四)测试用户登录接口1、查看用户登录接口说明2、查看登录…

信号完整性测试

信号完整性测试----持续更新中示波器三要素:带宽采样率存储深度IIC信号测试:SPI信号测试USART信号测试RS232信号测试RS485信号测试CAN信号测试PWM信号测试示波器三要素: 示波器三个重要参数:带宽、采样率、存储深度 带宽 示波器的带宽&…

C语言实现windows,linux双版本下的进度条小程序,快来试一试吧

文章目录C语言缓冲区🚀1.输入缓冲区🍇模拟登录密码场景🍇从键盘将内容输入到内存的真正过程🍇解决方法:清空输入缓冲区🍉清掉一个字符🍉清空输入缓冲区所有字符🚀2.用户C语言级别的缓…

【jenkins部署冲突报错】一定要看!!!!!

背景 最近接手了新的项目,他的代码仓库的分支有点乱,dev、uat、master三个分支代码不同步,差别很大,甚至功能有些也不一样,所以,就导致在合并代码时要注意,最好新切一个分支A(同步m…

inveta PLSB 点线面体 示例工程

https://github.com/inveta/demo/blob/main/Resource/demo.md点线面体生成 POI(点)ps.emitMessage(["spawn-POI","location:X0 Y0 Z0", // cm"icon:\uE998", // char"title:POI标题", // string"color…

单独用HTML javascript CSS 写三版99乘法表,我就是班里最靓的仔

☆ 99乘法表,这个从小学就让我们开始产生肌肉记忆的知识点,伴随一生。而一旦开始学习软件开发知识,99乘法表将是一个基础中不可逃避的巩固升级作业。 ☆ 口算背诵相信大家已经滚瓜烂熟了,一一得一,二二得四&#xff…

【Linux】超好用的编译工具 —— gcc/g++

文章目录 前言 一、安装gcc/g 二、背景知识 三、gcc如何完成 1.预处理(进行宏替换) 2.编译(生成汇编) 3.汇编(生成机器可识别代码) 4.连接(生成可执行文件或库文件) 5.记忆选项的小技…

Tomcat 实用安装教程

Tomcat的介绍 Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得…

【模型训练】YOLOv7道路交通标志检测

YOLOv7道路交通标志检测 1、YOLOv7算法道路交通标志检测模型训练2、YOLOv7模型模型评估3、模型和数据集下载1、本项目采用YOLOv7算法实现对道路交通标志的检测和识别,在道路交通标志检测数据集中训练得到,我们训练了YOLOv7模型,经评估我们得出了各个模型的评价指标; 2、目标…

C · 初阶 | 循环语句

啊我摔倒了..有没有人扶我起来学习.... 👱个人主页:《CGod的个人主页》\color{Darkorange}{《CGod的个人主页》}《CGod的个人主页》交个朋友叭~ 💒个人社区:《编程成神技术交流社区》\color{Darkorange}{《编程成神技术交流社区》…

什么是跨域

目录 1 同源策略 2 什么是跨域 3 如何解决跨域 3.1 配置CROS 3.2 Nginx解决跨域问题 1 同源策略 跨域是指浏览器不能执行其他网站的脚本,是由浏览器的同源策略造成的,是浏览器加的安全限制。同源是指,域名,协议,端…

Android | WMS 解析(一)

前言 前段时间分析了 Window 的添加、更新和删除流程,也知晓了 Activity 、Dialog 和 Toast 中 Window 的创建过程,今天就接着上篇文章,看一下 WMS 的创建 以及WindowManager 添加 WIndow 后 WMS 是怎样进行操作的。上篇文章点这里直达&…

Linux下 gdb 调试打印函数局部变量

以下面代码&#xff0c;来说明一下&#xff0c;打印函数局部变量的操作&#xff0c;代码如下&#xff1a; #include <stdio.h>void fun1(void) {int data1 0;printf("data1: %d\n", data1); }void fun2(void) {int data2 1;fun1();printf("***data2: %…

联网智能门锁解锁智慧公租房

近年来&#xff0c;随着物联网技术的发展&#xff0c;愈来愈多的保障房、公租房、网约房、长短租公寓管理者们都在关注如何实现房屋智能管理&#xff0c;面对租户流动性大、管理复杂&#xff0c;房屋空置、闲置、非法转租&#xff0c;以及租户居住体验差等问题&#xff0c;无从…

【万字总结】C++——list的基本使用和模拟实现(建议收藏)

目录 一、list基本介绍 二、list的使用 1、list的初始化方式 2、list的增删查改 push_front和pop_front与push_back和pop_back insert erase 3、list迭代器的使用 正向迭代器 反向迭代器 4、list获取头尾元素 5、list容量操作 6、list的其他操作 sort splice r…

408 | 【2014年】计算机统考真题 自用回顾知识点整理

选择题 T3&#xff1a;循环队列 不同指针指向&#xff0c;队列判空/判满条件 1. rear:指向队尾元素 front:指向队头元素前一个位置 &#xff08;1&#xff09;牺牲一个存储空间 &#xff08;2&#xff09;判空条件&#xff1a;front rear &#xff08;3&#xff…

【C/自定义类型详解】——结构体(struct)、位段、枚举(enum)、联合(union)

关于C语言的知识放在专栏&#xff1a;C 小菜坤日常上传gitee代码&#xff1a;https://gitee.com/qi-dunyan ❤❤❤ 个人简介&#xff1a;双一流非科班的一名小白&#xff0c;期待与各位大佬一起努力&#xff01; 主要目录1、结构体&#xff08;struct&#xff09;1.0 结构体类型…

请问Graph Kernel Fusion(图算融合)在mindspore1.7.0下会生成融合后的mindIR的.dot文件吗

图算融合&#xff0c;GPU (NVIDIA-RTX3080) 验证 【操作步骤&问题现象】 1、参考&#xff08;基于mindspore0.5.0&#xff09;链接1&#xff1a; course: MindSpore实验&#xff0c;仅用于教学或培训目的。配合MindSpore官网使用。MindSpore experiments, for teaching or…