你说下HashMap的工作原理?

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

在这里插入图片描述

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

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

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

  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 官网参考 :

在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6