HashMap的扩容机制

简介

单纯的kv键值对结构,可以接受null键和null值,速度比较快,非线程安全。

HashMap的数据结构

HashMap实际上是一个“链表的数组”的数据结构,每个元素存放链表头结点的数组,即数组和链表的结合体。

Entry就是数组中的元素,每个 Map.Entry 其实就是一个key-value对,它持有指向下一个元素的引用,这就构成了链表。

工作原理:

1.put

当我们往HashMap中put元素的时候,先根据key的hashCode重新计算hash值,根据hash值得到这个元素在数组中的位置(即下标),如果数组该位置上已经存放有其他元素了,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放在链尾。如果数组该位置上没有元素,就直接将该元素放到此数组中的该位置上。

HashMap基于hashing原理,我们通过put()方法储存,当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,然后找到bucket位置来储存值对象。

当获取对象时,同上找到对应的bucket,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。 HashMap在每个链表节点中储存键值对对象。

HashMap的扩容机制相关推荐

  1. HashMap底层扩容机制是2倍的原理

    HashMap底层扩容2倍原理 总所周知,获取分配的两种计算公式: 内存中获取分区位置:hash(key.hashCode) % (length - 1) HashMap获取数据存储的位置:hash( ...

  2. 看完这篇还不懂HashMap的扩容机制,那我要哭了~

    HashMap 发出的 Warning:这是<Java 程序员进阶之路>专栏的第 56 篇.那天,小二垂头丧气地跑来给我诉苦,"老王,有个学弟小默问我' HashMap 的扩容机 ...

  3. HashMap的扩容机制---resize()

    扩容 就是重新计算容量,向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载更多的元素时,对象就需要扩大数组的长度,以便能装入更多的元素. 什么时候扩容? 当向容器添加元素的时 ...

  4. hashmap的扩容机制,腾讯Android开发面试记录,系列篇

    一.开始的开始 **Android框架体系架构(高级UI+FrameWork源码)**这块知识是现今使用者最多的,我们称之Android2013~2016年的技术,但是,即使是这样的技术,Androi ...

  5. hashmap的扩容机制,这些年我所经历的所有面试,工作感悟

    主要说一下个人经历,希望能给即将面试的小伙伴一些有效信息.大家都要加油~ 基本情况 先说一下个人基本情况,计算机科学与技术专业.主要学的Android开发,所以投的岗位都是Android开发工程师.投 ...

  6. hashmap 扩容是元素还是数组_HashMap的扩容机制---resize()

    面试的时候闻到了Hashmap的扩容机制,之前只看到了Hasmap的实现机制,补一下基础知识,讲的非常好 原文链接: Hashmap是一种非常常用的.应用广泛的数据类型,最近研究到相关的内容,就正好复 ...

  7. StringBuffer、StringBuilder、ArrayList、Vector、HashMap、HashTable 的扩容机制

    1. StringBuffer.StringBuilder 的扩容机制 StringBuffer.StringBuilder,默认初始化是 16 个字符,默认增容为 原长度+2 → 扩容后:2*(n+ ...

  8. java hashmap扩容大小_HashMap的扩容机制以及默认大小为何是2次幂

    HashMap的Put方法 HashMap的数据结构设计可以参考链接.接下来回顾HashMap的put(Key k, Value v)过程: (1)对 Key求Hash值,计算出Hash表下标,对应h ...

  9. hashmap扩容机制_图文并茂:HashMap经典详解!

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 代码中的注解多看几遍,其中HashMap的扩容机制是要必懂知识!结合图片一起理解! 什么是 HashMap? HashMap 是基于哈希表的 ...

最新文章

  1. 专访博世王红星:大数据和AI将是中国制造业升级新动力
  2. 高并发02_同步锁的一些题目
  3. git 新建分支并切换到该分支_Git何谓分支
  4. LNMP环境--搭建Discuz论坛
  5. 蒙哥马利java算法_算法详解 - 蒙哥马利算法的概念与原理
  6. 列表框、下拉列表框或组合框与数据库
  7. 电子政务互联互通软件平台的体系架构
  8. DIALOGBOXPARAMA
  9. 我知道的Activity
  10. tp3框架部署时报错 _MODULE_NOT_EXIST_
  11. AES加密解密SHA1、SHA加密MD5加密
  12. SAP MM 物料扩充MRP范围
  13. 论文阅读--利用完全卷积和空间变换网络从部分二维观测中产生三维超声
  14. [转载]从WiMAX看自主创新
  15. UIAppearance定制UI元素
  16. python raise函数
  17. oracle leg函数,Hive中的leg和lead函数简单使用
  18. 【GO | 基于linux和Windows平台的下载安装及配置】
  19. samba,nfs,iscsi网络文件系统
  20. 2016年的年终总结

热门文章

  1. NSDictionary / NSMutableDictionary 及 NSArray / NSmutableArray (实例)
  2. iPhone开发之Rotation
  3. Linux(debian7)操作基础(三)之PCI/PCI-E设备配置空间
  4. 【深度学习框架】Tensorflow Session.run()函数的进一步理解
  5. 【Windows 命令行】CMD 在资源管理器中打开当前路径
  6. 【今日CS 视觉论文速览】14 Dec 2018
  7. 数据库的备份 mysql
  8. 用代码建立与数据库的连接 c#连sqlserver
  9. 9203精英挑战赛注意事宜 一
  10. session演练1909051059