当前位置: 首页 > 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

在这里插入图片描述

http://www.lryc.cn/news/23371.html

相关文章:

  • k8s 配置ingress 并做一个demo
  • 【手把手一起学习】(七) Altium Designer 20常用PCB设计规则
  • (01)Unity 中使用 HDRP
  • 使用cmake在win10编译yolov5+tensorRT+cuda+cudnn+protobuf代码进行混合编译
  • 《C++ Primer Plus》第17章:输入、输出和文件(7)
  • PGLBox 超大规模 GPU 端对端图学习训练框架正式发布
  • sql-labs-Less1
  • 又一个国内类ChatGPT模型?【秘塔科技上线自研LLM大模型「对话写作猫」】
  • 卷麻了,00后测试用例写的比我还好,简直无地自容......
  • 动态网页的核心——JSP
  • RK3588平台开发系列讲解(系统篇)init.d介绍
  • taobao.user.buyer.get( 查询买家信息API )
  • python学生信息管理系统
  • 【微信小程序】-- WXML 模板语法 - 条件渲染 -- wx:if hidden (十一)
  • 2023上半年软考,广州/东莞/深圳/江苏报班是明智的选择
  • C++修炼之练气期一层——命名空间
  • matplotlib综合学习
  • IIS .Net Core 413错误和Request body too large解决办法
  • Spring Boot数据访问—(springboot 多数据源)—官方原版
  • 高燃!GitHub上标星75k+超牛的Java面试突击版
  • grid宫格布局新手快捷上手-f
  • 面试必刷101 Java题解 -- part 3
  • 干货满满!MES的简介和运用
  • 【ElasticSearch系列-01】初识以及安装elasticSearch
  • 【Leedcode】栈和队列必备的面试题(第一期)
  • Unity 渲染流程管线
  • c++之引用
  • Java-扑克牌的创建以及发放
  • 华为OD机试题,用 Java 解【开放日活动】问题
  • yarn run serve报错Error: Cannot find module ‘@vue/cli-plugin-babel‘ 的解决办法