你说下HashMap的工作原理?

news2024/9/24 6:40:58

在这里插入图片描述

我在网上看了很多文章 ,各种长篇大论 ,原理细节、实在看不下去了,所以着重讲一下,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

在这里插入图片描述

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

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

相关文章

【巨人的肩膀】JAVA面试总结(二)

1、💪 目录1、💪1.0、什么是面向对象1.1、JDK、JRE、JVM之间的区别1.2、什么是字节码1.3、hashCode()与equals()之间的联系1.4、String、StringBuffer、StringBuilder的区别1.5、和equals方法的区别1.6、重载和重写的区别1.7、List和Set的区别1.8、Array…

智慧标牌系统

一、产品特色 无需基站,服务器,手机蓝牙无线更新独创:智能感应标签内容到手机模版可自己DIY设计,多模版随意切换支持固件在线升级点阵电子墨水屏幕,柔和显示,超宽视角超长续航,3-5年电池寿命&a…

综述:弱监督下的异常检测算法

一、前言文章标题是: Weakly Supervised Anomaly Detection: A Survey这是一篇针对“弱监督”异常检测的综述。 其中弱监督异常检测 简称为 WSAD论文链接:https://arxiv.org/abs/2302.04549代码链接:https://github.com/yzhao062/wsad二、问题…

开发游戏时如何操控 游戏打击感?利用好Feel插件可快速提升游戏感

🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏制作专栏推荐:游戏制作 &…

WBS工作分解结构法,如何细分你的工作

想要做好项目管理,就必须掌握这个方法——WBS 项目分解的结构也是至关重要,WBS分解结构的特点是: 1、自上而下,逐级进行分解。 2、一个任务节点也只能一个人负责,其他人配合。 3、工作量以日为单位。 4、根据项目…

记录第一个Python练习的过程

题目如下 编写一个名为collatz()的函数,它有一个名为number的参数。如果参数是偶数,那么collatz()就打印出number // 2,并返回该值。如果number是奇数,collatz()就打印并返回3 * number 1。 然后编写一个程序,让用户…

【强烈建议收藏:计算机网络面试专题:HTTP协议、HTTP请求报文和响应报文、HTTP请求报文常用字段、HTTP请求方法、HTTP响应码】

一.知识回顾 之前我们一起学习了HTTP1.0、HTTP1.1、HTTP2.0协议之前的区别、以及URL地址栏中输入网址到页面展示的全过程&&DNS域名解析的过程、HTTP协议基本概念以及通信过程、HTTPS基本概念、SSL加密原理、通信过程、中间人攻击问题、HTTP协议和HTTPS协议区别。接下来…

毕业设计 基于51单片机环境监测设计 光照 PM2.5粉尘 温湿度 2.4G无线通信

基于51单片机环境监测设计 光照 PM2.5粉尘 温湿度 2.4G无线通信1、项目简介1.1 系统构成1.2 系统功能2、部分电路设计2.1 STC89C52单片机核心系统电路设计2.2 dht11温湿度检测电路设计2.3 NRF24L01无线通信电路设计3、部分代码展示3.1 NRF24L01初始化3.2 NRF24L01的SPI写时序3.…

H264基本原理

前言H264视频压缩算法现在无疑是所有视频压缩技术中使用最广泛,最流行的。随着 x264/openh264以及ffmpeg等开源库的推出,大多数使用者无需再对H264的细节做过多的研究,这大降低了人们使用H264的成本。但为了用好H264,我们还是要对…

决策树在sklearn中的实现

目录 一.模块sklearn.tree 二.建模基本流程 三.DecisionTreeClassifier重要参数 1.criterion 2.random_state & splitter 3.剪枝参数max_depth 4.剪枝参数min_samples_leaf & min_samples_split 5.max_features & min_impurity_decrease 6.class_weight …

Java奠基】掌握Java基础知识

目录 常见字面量 特殊字面量 数据类型 标识符 键盘录入 常见字面量 字面量就是数据在程序中的书写格式,字面量的分类如下: 字面量类型说明举例整数类型不带小数点的数字12,25小数类型带小数点的数字3.14,-5,20…

【设计模式】7.适配器模式

概述 如果去欧洲国家去旅游的话,他们的插座如下图最左边,是欧洲标准。而我们使用的插头如下图最右边的。因此我们的笔记本电脑,手机在当地不能直接充电。所以就需要一个插座转换器,转换器第1面插入当地的插座,第2面供…

易基因|独家分享:高通量测序后的下游实验验证方法——DNA甲基化篇

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。此前,我们分享了DNA甲基化研究的测序数据挖掘思路(点击查看详情),进而鉴定出研究的目的基因或目标区域的DNA甲基化。做完测序后,…

华为OD机试题,用 Java 解【租车骑绿岛】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

电商(强一致性系统)的场景设计

领域拆分:如何合理地拆分系统? 一般来说,强一致性的系统都会牵扯到“锁争抢”等技术点,有较大的性能瓶颈,而电商时常做秒杀活动,这对系统的要求更高。业内在对电商系统做改造时,通常会从三个方面…

OM | 具有弹性需求的广义随机共乘(拼车)用户均衡问题

编者按: 通过扩展确定性共乘用户均衡问题,提出了具有弹性需求的广义随机共乘用户均衡问题,用于具有共乘出行活动的城市交通网络分析。 1、引言​ 共乘(ridesharing), 即生活中的“拼车”、“顺风车”&am…

华为OD机试题,用 Java 解【斗地主】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

巧用 ChatGPT,让开发者的学习和工作更轻松

引言 随着人工智能技术的快速发展和广泛应用,ChatGPT 作为一种新兴的自然语言处理模型,近期备受瞩目,引发了广泛讨论。 ChatGPT 具有多种应用场景,既可以用作聊天机器人,实现智能问答和自然语言交互,也可…

2.27自动化测试

第零步 根据脑图写测试用例第一步.创建共同类防止每次进行测试不同界面的时候都重新创建驱动浪费时间注意要用static 否则后续无法直接使用getdriver方法第二步 对登录界面写测试用例先在test下创建一个登录类.每个界面用不同的类,防止混在一起并让其继承common包下的commonDri…

让马斯克反悔的毫米波雷达,被国产雷达头部厂商木牛科技迭代到了5D时代

近日,特斯拉或将在其HW4.0硬件系统配置一枚高精度4D毫米波雷达的消息在外网刷屏。据分析,“纯视觉”信仰者马斯克之所以做出这样的决定,一方面是减配了雷达的特斯拉自动驾驶,表现不尽如人意;另一方面也跟毫米波雷达的技…