Java的HashMap底层原理解析

java集合中有比较重要的两个概念

一个是Collection(存放单个数据)实现了list和set两个接口

一个是Map(存放键值对)

今天就主要来讨论一下Map中的HashMap的底层原理


1.HashMap存储结构

HashMap的存储结构为数据结构中散列表(哈希表)中的链式存储结构,其构成为数组+连表的存储结构 如下图

即存储的数据先经过hash算法计算存储位置,相同位置的数据存储在对应数组后,并依次形成链表形式。

2.HashMap存储的数据类型(比较复杂)

(1)HashMap底层维护了Node类(可以存储键值对的数据类型,并且是实现了Map.Entry<K,V>接口)形成的数组table,默认为null。

(2)为了方便遍历,还会创建EntrySet集合,集合内放入的元素类型为Entry 该类型就有K,V 即EntrySet<Entry<key,value>>

例如下图,每一个横行是一个Entry ,4个Entry 组成一个EntrySet

Entry 中的每一个 key 值存储在Set中,而KeySet中的每个值都指向Node类中的Key值

Entry 中的每一个 value 值存储在Collection中,而Collection中的每个值都指向Node类中的Value值

(这里使用了向上造型的思想,EntrySet<>中其实放入的是实现Map.Entry<K,V>Node类)重点

这些事情只是为了。Entry 中的**getKey()getValue()**方法,可以直接获取键与值。。。

3.HashMap的动态生成

因为HashMap是动态生成的集合,下面是它的扩容原理

(1)首次添加,则需要扩容table容量为16,K-V的个数临界值(threshold)为12(16*0.75)

(2)以后再扩容,则需要扩容table容量为原来的2倍(32),临界值为原来的2倍,即24,依次类推

(3)在Java8中,如果一条链表的元素个数超过8个,如果table的大小 < 64,进行扩容

​ table的大小 >= 64,就会进行树化,变为红黑树(方便进行查询操作)

下图为总体结构图

4.HashMap的添加机制

添加key-val时,通过计算key的哈希值得到在table的索引。然后判断该索引处是否有元素,
如果没有元素直接添加。

如果该索引处有元素,继续判断该元素的key和准备加入的key相是否等,

​ 如果相等,则直接替换val;

​ 如果不相等需要判断是树结构还是链表结构,做出相应添加处理。

如果添加时发现容量不够,则需要扩容。


以上就是HashMap基本的设计理念分析,参考源码进行书写总结,放心查阅.

Java HashMap底层原理解析相关推荐

  1. HashMap底层原理(当你put,get时内部会发生什么呢?)

    HashMap底层原理解析(一) 接触过HashMap的小伙伴都会经常使用put和get这些方法,那接下来就对HashMap的内部存储进行详解.(以初学者的角度进行分析)-(小白篇) 当程序试图将多个 ...

  2. java map原理_Java HashMap底层原理分析

    前两天面试的时候,被面试官问到HashMap底层原理,之前只会用,底层实现完全没看过,这两天补了补功课,写篇文章记录一下,好记性不如烂笔头啊,毕竟这年头脑子它记不住东西了哈哈哈.好了,言归正传,今天我 ...

  3. HashMap底层原理分析(put、get方法)

    1.HashMap底层原理分析(put.get方法) HashMap底层是通过数组加链表的结构来实现的.HashMap通过计算key的hashCode来计算hash值,只要hashCode一样,那ha ...

  4. java底层原理书籍_不愧是阿里p8大佬!终于把Java 虚拟机底层原理讲清楚了,请签收...

    概述 JVM 的内存模型和 JVM 的垃圾回收机制一直是 Java 业内从业者绕不开的话题(实际调优.面试)JVM是java中很重要的一块知识,也是面试常问的问题之一,直至今天,仍然还有许多面试者在被 ...

  5. 深度解剖HashMap底层原理

    HashMap底层原理 写在前面 JDK1.7版本--HashMap java.1.7源码分析 new一个HashMap实例的存储流程图如下: API常用方法 API中重要的变量 第一步:申明一个Ha ...

  6. 我向面试官讲解了hashmap底层原理,他对我竖起了大拇指

    前言: 正值金九银十的黄金招聘期,大家都准备好了吗?HashMap是程序员面试必问的一个知识点,其内部的基本实现原理是每一位面试者都应该掌握的,只有真正地掌握了 HashMap的内部实现原理,面对面试 ...

  7. Java CAS底层原理

    Java CAS底层原理 Java CAS底层原理,这一篇就够了!!! CAS全称(Conmpare And Swap)比较并交换,是一种用于在多线程环境下实现同步功能的机制.CAS 操作包含三个操作 ...

  8. Java异常基础+原理解析+自定义异常

    Java异常基础+原理解析 1.什么是异常呀? 程序中的异常就好比人生病了,即再程序的运行过程中.出现非正常的情况,导致jvm非正常终止终止 异常的体系: 异常的的根类为java.lang.Throw ...

  9. Java集合—HashMap底层原理

    原文链接:最通俗易懂搞定HashMap的底层原理 HashMap的底层原理面试必考题.为什么面试官如此青睐这道题?HashMap里面涉及了很多的知识点,可以比较全面考察面试者的基本功,想要拿到一个好o ...

  10. HashMap底层原理全解析

    作为面试中的高频题目,我相信每一个java程序员都有必要搞懂HashMap的底层原理和实现细节,废话不多说直接开撸. 首先简单说一下HashMap的实现原理: 首先有一个Node<k,v> ...

最新文章

  1. Gnuplot安装避坑
  2. 砂.随笔.三十一.息斯敏
  3. cocos2dx 学习代码记录
  4. Scenario 7 – HP C7000 VC FlexFabric Tunneled VLANs and SUS A/A vSphere
  5. SAP Gateway service language determination
  6. python如何退出模块_如何将一个 Python 函数进行模块化封装
  7. TypeError: ‘RClass‘ object is not callable, TypeError: ‘CClass‘ object is not callable
  8. 单相功率因数校正PFC电路的simulink仿真(从电路图搭建到C语言实现PID控制)
  9. mysql redo,MySQL 8.0 redo log的深入解析
  10. Operator基础:1: Operator Framework简介
  11. mysql 报broken pipe_Mysql Broken pipe错误
  12. 一文解读Masked Autoencoder(MAE)
  13. 数字翻译成英语JavaScript
  14. 10个优秀的Golang开源库类,武装生产力
  15. 解忧云SMS短信服务平台系统 短信发送系统源码 全解密随时可以二开无后门
  16. 微信账号和语音文件的结构分析
  17. Lua 实现Get Set属性
  18. iOS运行时Runtime浅析
  19. 【笔记】操作系统(六)——进程同步
  20. MHD-UH40RK4K高清视频会议摄像头

热门文章

  1. Bootstrap模板-Inspinia.2.9.2
  2. Redis 命令 - 在线参考
  3. atheros 9531 uboot spi flash 32m支持
  4. 亿图图示上线小程序,MindMaster移动端迎来大更新,亿图软件八周年再出发
  5. TextCNN pytorch实现
  6. halcon相机标定助手_Halcon教程之单相机标定
  7. OpenPose安装(gtx1650+cuda10.1+cudnn7.6.0+anaconda3)
  8. HTTP报文-请求方式
  9. gms2游戏移植linux,GMS卡刷包制作
  10. 第八讲 函数直接展开成幂级数