个人网站:riun's blog

(现在都在这上面写东西)

  • HashMap使用数组加链表实现。每个数组元素中储存着链表。

  • 当使用put方法储存key-value键值对时,会先调用key的hashCode方法,得到此key经特定哈希运算后的值,然后将此值通过其他运算(?)得到一个值,将这个值与(length-1)做或操作(&),相当于对数组长度做取余操作。最终得到一个值作为此key在数组中的索引值,然后将key-value键值对储存进去。通过这种方法将储存的不同key-value键值对“散列”到数组的不同位置。

    在储存的时候,如果索引位置尚无元素,那么直接储存。如果有元素,那么就调用此key的equals方法与原有的元素的Key进行比较。如果返回true,说明在这个equals定义的规则上,这两个Key相同,那么将原有的key保留,用新的value代替原来的value。如果返回false,那么就说明这两个key在equals定义的规则下是不同元素,那么就与此链表的下一个结点进行比较,知道最后一个结点都没有相同元素,再下一个是null的时候,就用头插法将此key-value添加到链表上。

    HashMap对重复元素的处理方法是:key不变,value覆盖。

  • 当使用get方法获取key对应的value时,会和储存key-value时用同样的方法,得到key在数组中的索引值,如果此索引值上没有元素,就返回null。如果此索引值上有元素,那么就拿此key的equals方法与此位置元素上的key进行比较,如果返回true。就返回此位置元素对应的value。如果返回false,就一直按链表往下比较,如果都是返回false,那么就返回null。

另外:HashMap在JDK1.8之后引入红黑树结构。HashMap是线程不安全的,线程安全的是CurrentHashMap,不过此集合在多线程下效率低。

本人手写HashMap,实现部分方法:https://github.com/hanhanhanxu/MyHashMap

关于更多Hash算法,HashMap扩容机制等请移步我的个人博客网站:Hash | 旭

面试题:请说一下HashMap的底层实现原理。相关推荐

  1. java集合:HashMap的底层实现原理

    HashMap的底层实现原理是面试中出现频率非常高的一道面试题,本文将对HashMap的底层实现原理做一个简要的概况和总结,便于复习. 一.对于Map集合存储结构的理解 首先介绍以HashMap为典型 ...

  2. Java HashMap的底层实现原理

    一.Java HashMap的底层实现原理(以jdk7为例) 1.HashMap map = new HashMap(); 在实例化以后,才在底层创建了一个长度为16的一维数组 Entry [] ta ...

  3. 面试题:HashMap的底层运行原理(通俗易懂)

    一图带你读懂HashMap的底层运行:

  4. 复习一波,hashMap的底层实现原理

    前言 HashMa是Java中最常用的集合类框架,也是Java语言中非常典型的数据结构,同时也是我们需要掌握的数据结构: java中集合的分类: java中的集合可以分为:单列集合(collectio ...

  5. HashMap的底层原理你真的知道?

    HashMap的底层实现原理是面试中出现频率非常高的一道面试题,本文将对HashMap的底层实现原理做一个简要的概况和总结,便于复习. 一.对于Map集合存储结构的理解 首先介绍以HashMap为典型 ...

  6. HashMap的底层存储结构和实现原理

    文章目录 前言 一.HashMap是什么? 二. 数组 三. 链表 四.哈希算法 五.哈希冲突 总结 前言 HashMap实现了Map接口,我们常用来put/get操作读存键值对数据,比较典型的key ...

  7. 聊聊Java系列-集合之HashMap底层结构原理

    前言           由于HashMap在我们的工作和面试中会经常遇到,所以搞懂HashMap的底层结构原理就显得十分有必要了.在JDK1.8之前,HashMap的底层采用的数据结构是数组+链表, ...

  8. 【java】HashMap底层实现原理及面试题

    目录 一.哈希表(散列) 1.什么是哈希表 2.什么是哈希冲突(面试题) 3.解决哈希冲突的方法(面试题) (1) 开放地址法 ① 线性探查 ②二次探查 ③随机探查 (2) 再哈希法 (3) 链地址法 ...

  9. HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别(转)

    HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别 文章来源:http://www.cnblogs.com/beatIteWeNerverGiveU ...

最新文章

  1. Android AOSP 单独编译某一模块
  2. 流程图在登录后会增加操作选项的方法
  3. boost::endian模块实现benchmark的测试程序
  4. git/github使用完整教程(2)分支
  5. mysql 5.6 禁用 innodb_MYSQL 5.6中禁用INNODB引擎
  6. 堆和栈的区别(转过无数次的文章)
  7. java中各种时间格式的转化
  8. Python:Python3错误提示TypeError: slice indices must be integers or None or have an __index__ method解决办法
  9. python换行输出三个数中最大数_关于Python 3中print函数的换行详解
  10. java文件删除操作_Java文件复制删除操作合集
  11. 工具 | Procexp工具使用及案例说明
  12. 华为主题包hwt下载_华为EMUI系统主题文件hwt修改及制作详细教程
  13. Java架构师成长之道之计算机组成原理概述篇
  14. PAT乙级1085:PAT单位排行 (25)
  15. 秒搜编程好书 就用这个Python写的爬虫网站
  16. 利用OBS和手机摄像头录课(录屏/录像)时的方法与参数设置
  17. 数学与应用数学专业考计算机研究生,数学与应用数学专业学生考研有哪些方向 数学与应用数学专业学生考研方向是怎样的...
  18. avro-java,proto-java
  19. pytorch深度学习笔记(一)
  20. 银内胆保温杯的功效和作用

热门文章

  1. bzoj 3728 zarovik 买灯泡
  2. 《每日一题》——146. LRU 缓存|460. LFU 缓存
  3. 自我介绍一分钟范文(碎的)
  4. 腾讯企业邮箱管理权限可实现什么?
  5. 【企业邮箱注册】管理员如何设置定期修改密码?
  6. 工业级氯化锂2022年全球行业分析报告
  7. 如何招聘:永远不要自负的人
  8. 钱诚11.29黄金白银TD美盘走势分析及期货原油操作建议
  9. Coinbase眼中的侧链和layer2解决方案
  10. 二维码的生成和解析原理