当前位置: 首页 > news >正文

你说下HashMap的工作原理?

在这里插入图片描述

我在网上看了很多文章 ,各种长篇大论 ,原理细节、实在看不下去了,所以着重讲一下,HashMap 面试会问到的点
说人话, 你们公司的集合 不会自研吧, 假如 你们叫 锤子科技 ,那老板也不会要求你去写一个 CuiMap 去强制要求所有开发人员

所以 学习 HashMap 只需要 学习思想 , 比如下载 JDK 源码 编译 、打断点调试 参考写法 ,尝试的去 封装 、优化细节
而不是画一堆图,更多的是实操,面试的话 ,把下面 的 HashMap 几个重点背下来即可 ,面试官想要了解的是 你有没有过 源码的 阅读习惯 ,如果有的话 这样 也就说明 你是个静下心来钻研的人

这样今后项目中,你也能有一份光、 发一份热!

  • JDK 源码阅读环境搭建
  1. HashMap 的存储机制
    a. 在 Java 1.8 中,如果链表的长度超过了 8且数组长度最小要达到64 ,那么链表将转化为红黑树;链表长度低于6,就把红黑树转回链表;
  2. Java 1.8 中 HashMap 的不同
    a. 在 Java 1.8 中,如果链表的长度超过了 8 ,那么链表将转化为红黑树;链表长度低于6,就把红黑树转回链表;
    b. 发生 hash 碰撞时,Java 1.7 会在链表头部插入,而 Java 1.8 会在链表尾部插入;
    c. 在 Java 1.8 中,Entry 被 Node 代替(换了一个马甲)。
  3. put过程
    a. 对Key求Hash值,然后再计算下标
    b. 如果没有碰撞,直接放入桶中(碰撞的意思是计算得到的Hash值相同,需要放到同一个bucket中)
    c. 如果碰撞了,以链表的方式链接到后面
    d. 如果链表长度超过阀值( TREEIFY THRESHOLD==8),就把链表转成红黑树,链表长度低于6,就把红黑树转回链表
    e. 如果节点已经存在就替换旧值
    f. 如果桶满了(容量16*加载因子0.75),就需要 resize(扩容2倍后重排)
  4. get过程
    a. 当我们调用get()方法,HashMap会使用键对象的hashcode找到bucket位置
    b. 找到bucket位置之后,会调用keys.equals()方法去找到链表中正确的节点
    c. 最终找到要找的值对象

HashMap 官网参考 :

  • https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html

在这里插入图片描述

相关文章:

你说下HashMap的工作原理?

我在网上看了很多文章 ,各种长篇大论 ,原理细节、实在看不下去了,所以着重讲一下,HashMap 面试会问到的点 说人话, 你们公司的集合 不会自研吧, 假如 你们叫 锤子科技 ,那老板也不会要求你去写一…...

k8s 配置ingress 并做一个demo

需求:k8s 配置好之后除了 nodeport 以外都是对集群内部的行为使用nodeport 并不是很友好,要自己处理很多的端口管理使用ingress 可以更好的整合配置服务进程:下载ingress-nginx 的yaml 文件https://github.com/kubernetes/ingress-nginx/blob…...

【手把手一起学习】(七) Altium Designer 20常用PCB设计规则

1 常用PCB设计规则 PCB规则设计是PCB设计中至关重要的环节,它约束了电气要求、布线方式、器件摆放位置等,为后续的手动布局、布线提供依据。完善的PCB规则设计,可以减少设计中的错误,提高PCB设计效率。 1.1 PCB设计规则管理器 …...

(01)Unity 中使用 HDRP

概述Unity在2019.2版本中推出HDRP(高清渲染管线),目的是为了提高图形质量,实现从照片写实到风格化的图像。先看一下官方对HDRP的概述:高清渲染管线 (HDRP) 是由 Unity 构建的高保真脚本化渲染管…...

使用cmake在win10编译yolov5+tensorRT+cuda+cudnn+protobuf代码进行混合编译

这里进行之前需要把protobuf在win10下编译,可以参考这篇文章从Linux下载下来的工程代码,这里建议直接使用vs系列打开不要用vscode打开,vscode对win下的cmake不友好,主要体现在报错机制无法直接定位,题主的环境是vs2022…...

《C++ Primer Plus》第17章:输入、输出和文件(7)

编程练习 编写一个程序计算输入流中第一个$之前的字符数目&#xff0c;并将$留在输入流中。 #include<iostream>int main() {int ct 0;while(std::cin.peek()!$){ct;std::cin.get();}std::cout << "num: " << ct << std::endl;return 0; }答…...

PGLBox 超大规模 GPU 端对端图学习训练框架正式发布

作者 | PGLBox项目组 导读 PGLBox是百度研发的基于GPU的大规模图模型训练框架&#xff0c;支持数百亿节点和边的图模型全GPU训练&#xff0c;已在百度广泛部署。相比业界主流的分布式 CPU 解决方案&#xff0c;PGLBox 具有超高性能、超大规模、算法丰富、灵活易用、落地广泛等优…...

sql-labs-Less1

靶场搭建好了&#xff0c;访问题目路径 http://127.0.0.1/sqli-labs-master/Less-1/ 我最开始在做sql-labs靶场的时候很迷茫&#xff0c;不知道最后到底要得到些什么&#xff0c;而现在我很清楚&#xff0c;sql注入可以获取数据库中的信息&#xff0c;而获取信息就是我们的目标…...

又一个国内类ChatGPT模型?【秘塔科技上线自研LLM大模型「对话写作猫」】

又一个国内类ChatGPT模型&#xff1f;【秘塔科技上线自研LLM大模型「对话写作猫」】 说个题外话&#xff0c;今天一大早就收到了Biying的邮件。前段时间不是申请了New Biying的内测吗&#xff1f;下午可以尝试一下玩一会儿。如果体验感还不错或者还有很多bug&#xff0c;那我到…...

卷麻了,00后测试用例写的比我还好,简直无地自容......

经常看到无论是刚入职场的新人&#xff0c;还是工作了一段时间的老人&#xff0c;都会对编写测试用例感到困扰&#xff1f;例如&#xff1a; 如何编写测试用例&#xff1f; 作为一个测试新人&#xff0c;刚开始接触测试&#xff0c;对于怎么写测试用例很是头疼&#xff0c;无法…...

动态网页的核心——JSP

文章目录1&#xff0c;JSP 概述2&#xff0c;JSP 小案例2.1 搭建环境2.2 导入 JSP 依赖2.3 创建 jsp 页面2.4 编写代码2.5 测试3&#xff0c;JSP 原理4&#xff0c;JSP 总结4.1 JSP的 缺点4.2技术的发展历程4.3JSP的必要性最后说一句1&#xff0c;JSP 概述 JSP&#xff08;全称…...

RK3588平台开发系列讲解(系统篇)init.d介绍

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、Linux启动简介二、sysvinit配置三、inid.d介绍沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇介绍init.d相关知识。 一、Linux启动简介 Linux用户空间启动时,第一个会启动init进程,用来引导启动其…...

taobao.user.buyer.get( 查询买家信息API )

&#xffe5;开放平台基础API必须用户授权 查询买家信息API&#xff0c;只能买家类应用调用。 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 请求参数 响应参数 点击获取key和secret 请求示例 TaobaoClient client new…...

python学生信息管理系统

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;python学生信息 免费获取完整源码源文件配置教程说明等 在IDLE中运行《学生信息管理系统》即可进入如图1所示的系统主界面。在该界面中可以选择要使用功能对应的菜单进行不同的操作。在选择功能菜单时&#xff0c;有两种方…...

【微信小程序】-- WXML 模板语法 - 条件渲染 -- wx:if hidden (十一)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…...

2023上半年软考,广州/东莞/深圳/江苏报班是明智的选择

软考是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职称资格考试。 系统集成…...

C++修炼之练气期一层——命名空间

目录 1.引例 2.命名空间的定义 3.命名空间的使用 4.命名空间使用注意事项 1.引例 #include <stdio.h> #include <stdlib.h>int rand 10;int main() {printf("%d\n", rand);return 0; } 当我们用C语言写下这样的代码&#xff0c;看着并没有什么语法…...

matplotlib综合学习

1.arange函数arange函数需要三个参数&#xff0c;分别为起始点、终止点、采样间隔。采样间隔默认值为1看例子&#xff1a; import numpy as np #import matplotlib.pyplot as plt xnp.arange(-5,5,1) print(x)2.绘制sin(x)曲线import numpy as np import matplotlib.pyplot as …...

IIS .Net Core 413错误和Request body too large解决办法

错误描述图片比较大时&#xff0c;在前端上传就报413错误。根本到不了后端。在网上看到这个文章比较有用。https://blog.csdn.net/wstever/article/details/1288707421、修改网站Web.config配置文件加入下面这段配置<?xmlversion"1.0" encoding"utf-8"…...

Spring Boot数据访问—(springboot 多数据源)—官方原版

Spring Boot 包含许多用于处理数据源的启动器&#xff0c;本文回答与执行此操作相关的问题。一、配置自定义数据源要配置自己的DataSource&#xff0c;请在配置中定义该类型的Bean。Spring Boot在任何需要的地方重用DataSource&#xff0c;包括数据库初始化。如果需要外部化某些…...

当欧姆龙NX1P2遇上丰田PC10G:一次EIP实例ID通信的“踩坑”与“填坑”实录

当欧姆龙NX1P2遇上丰田PC10G&#xff1a;EIP实例ID通信的实战解析 在工业自动化领域&#xff0c;不同品牌设备间的通信集成往往充满挑战。最近一次非标设备联调项目中&#xff0c;我们遇到了欧姆龙NX1P2控制器与丰田PC10G设备通过EtherNet/IP&#xff08;EIP&#xff09;协议通…...

2. Linux桌面环境介绍

2. Liunx桌面环境介绍 桌面介绍终端设置 设置终端属性&#xff1a;字体快捷键&#xff1a; 新建终端&#xff08;ctrlaltN&#xff09;新建标签&#xff08;ctrlaltT&#xff09;背景和锁屏设置语言和输入法设置课后作业 系统开机、关机账户的注销、锁屏打开常用程序&#xff0…...

大数据毕业设计容易的题目答疑

1 引言 毕业设计是大家学习生涯的最重要的里程碑&#xff0c;它不仅是对四年所学知识的综合运用&#xff0c;更是展示个人技术能力和创新思维的重要过程。选择一个合适的毕业设计题目至关重要&#xff0c;它应该既能体现你的专业能力&#xff0c;又能满足实际应用需求&#xff…...

告别枯燥刷怪!用Python+大漠插件实现《功夫》游戏后台自动挂机(附完整源码)

用Python与大漠插件打造《功夫》游戏智能挂机系统 在角色扮演类游戏中&#xff0c;重复性的任务往往成为玩家体验的瓶颈。以经典游戏《功夫》为例&#xff0c;"考古"任务需要不断接取、放弃任务直至找到特定地点&#xff0c;再完成打怪流程。这种机械操作不仅耗时耗力…...

别再让AI瞎忙活了!用Claude Code的SubAgent打造你的专属开发团队(附React项目实战)

别再让AI瞎忙活了&#xff01;用Claude Code的SubAgent打造你的专属开发团队&#xff08;附React项目实战&#xff09; 在软件开发的世界里&#xff0c;我们常常面临一个困境&#xff1a;要么雇佣一个庞大的团队&#xff0c;每个成员各司其职但成本高昂&#xff1b;要么依赖全能…...

Qwen3-TTS在心理治疗中的应用:情感化语音陪伴系统

Qwen3-TTS在心理治疗中的应用&#xff1a;情感化语音陪伴系统 1. 引言 想象一下这样的场景&#xff1a;一位正在经历焦虑情绪的用户&#xff0c;深夜无法入睡&#xff0c;需要即时的情感支持。传统的心理咨询需要预约等待&#xff0c;而此刻他们最需要的是一个能够理解、回应…...

Cursor Free VIP:突破AI编程助手限制的完整解决方案

Cursor Free VIP&#xff1a;突破AI编程助手限制的完整解决方案 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial…...

OpenClaw+GLM-4.7-Flash极客玩法:浏览器自动化与RPA任务融合

OpenClawGLM-4.7-Flash极客玩法&#xff1a;浏览器自动化与RPA任务融合 1. 当OpenClaw遇见GLM-4.7-Flash 去年冬天的一个深夜&#xff0c;我正为重复性的网页数据抓取任务头疼不已。Selenium脚本频繁因页面结构变化而崩溃&#xff0c;每次都需要人工介入调整。直到发现OpenCl…...

FigmaCN:5分钟快速实现Figma中文界面的终极解决方案

FigmaCN&#xff1a;5分钟快速实现Figma中文界面的终极解决方案 【免费下载链接】figmaCN 中文 Figma 插件&#xff0c;设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma英文界面而烦恼吗&#xff1f;figmaCN是一款专为中文用户打造…...

从零部署RK3588 MPP:硬编解码环境搭建与核心工具解析

1. RK3588 MPP硬编解码环境搭建全流程 第一次在ArmSoM-W3开发板上折腾RK3588的MPP硬编解码环境时&#xff0c;我踩了不少坑。这里把完整搭建过程拆解成可复现的步骤&#xff0c;用最直白的语言分享给各位开发者朋友。 MPP&#xff08;Media Process Platform&#xff09;是瑞芯…...