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. 大一计算机在线考试,Word 大一计算机考试操作题
  2. 深度学习未来的三种方式
  3. 现在的学生太强了,徒手撸了一个小米商城项目(附源码)!
  4. MASA Framework - 整体设计思路
  5. react api_使用Java EE 8中的React式API加速服务
  6. 前端学习(1578):React简介
  7. h3c交换机划分vlan配置_华为、H3C、锐捷三家交换机配置命令详解
  8. Unable to execute dex: GC overhead limit exceeded
  9. mysql5.5查询字段语句_mysql查询同一个字段下,不同内容的语句
  10. 微软遭30万人实名抗议:非人道的1914万美元,能不能别赚?
  11. Spring 中的重试机制,简单、实用!
  12. Dynamips--RIP协议分析的详细过程1--前期工作准备
  13. SQL Server 数据库之字符串函数
  14. html中改变一张图片的颜色,css怎么改变图片颜色
  15. NRF52832 PWM 占空比调整详解
  16. 计算机排线知识,宏利工程师为您讲解笔记本电脑触摸板软排线FFC的知识点[宏利]...
  17. 【历史上的今天】7 月 18 日:英特尔成立;万维网上传了第一张照片;eBay 分拆 PayPal
  18. 1907 Problem A 吃糖果
  19. 【编程题 动态规划】最长公共子序列(详细注释 易懂)
  20. 研究生毕业可直接落户,享受10万补贴!汇总各城市人才引进政策!

热门文章

  1. javascript 中的面向对象实现 如何封装
  2. AngularJS jQuery 共存法则
  3. MongoDB 教程三: 高级查询 (SQL到MongoDB映射表)
  4. 利用Facebook提供的免费工具进行宣传
  5. Shell编程:简洁的 Bash Programming 技巧
  6. php clean html 可以设置过滤及保留属性
  7. input 关闭输入法
  8. H5CS3酷炫登录注册静态页面
  9. 神奇的python(六)之python的串口操作(pyserial)
  10. 草稿 断开式连接 1204