每天一个知识点(四)说一下 HashMap 的实现原理?

简介: HashMap底层是一个哈希表,以数组加链表的形式存储值。HashMap具有以下特点:1.HashMap允许key和value为空2.HashMap是线程不安全的3.HashMap的初始容量为16,负载因子大小为0.754.在jdk7.0中,底层是数组加链表;在jdk8.0中,底层是数组加链表加红黑树

微信搜索《Java鱼仔》,每天一个知识点不错过


(一)每天一个知识点


说一下 HashMap 的实现原理?


(二)结论


(2.1)HashMap的特点


HashMap底层是一个哈希表,以数组加链表的形式存储值。HashMap具有以下特点:


1.HashMap允许key和value为空


2.HashMap是线程不安全的


3.HashMap的初始容量为16,负载因子大小为0.75


4.在jdk7.0中,底层是数组加链表;在jdk8.0中,底层是数组加链表加红黑树


(2.2)HasnMap的put操作


HashMap中维护了Node类型的数组table,当HashMap创建对象时,设置负载因子为0.75,table还是null。


当第一次添加元素时,将table的容量设置为16,临界值设置为12


每次添加元素调用putVal方法:


1.将key的hash值和table容量-1进行与运算,得到索引值


2.判断该存放位置上是否有元素,如若没有元素则直接放上去;如果该索引位置已存在元素,则继续判断


3.如果该位置的元素和添加元素相等,则直接覆盖,如果不相等,则继续判断是链表结构还是树状结构,按照相对应的方式添加。


如果添加的数量大于临界值,执行resize方法对容量双倍扩容。并打乱顺序重新排列。


(三)再多学一点


我专门写了一篇博客对HashMap、HashTable、TreeMap的底层源码进行分析和对比,大家可以看下:


https://link.juejin.cn/?target=https%3A%2F%2Fblog.csdn.net%2Fqq_41973594%2Farticle%2Fdetails%2F104072361


相关文章
|
17天前
|
存储 缓存 安全
面试题-HashMap底层原理与HashTable的区别
字节跳动面试题-HashMap底层原理与HashTable的区别
26 0
|
6月前
|
存储 Java
每日一道面试题之HashSet的实现原理~
每日一道面试题之HashSet的实现原理~
|
4月前
|
存储 算法 安全
认真学习Java集合之HashMap的实现原理
认真学习Java集合之HashMap的实现原理
31 0
认真学习Java集合之HashMap的实现原理
|
4月前
|
缓存 算法 Java
认真学习Java集合之LinkedHashMap的实现原理
认真学习Java集合之LinkedHashMap的实现原理
43 0
认真学习Java集合之LinkedHashMap的实现原理
|
8月前
|
存储 安全 算法
HashMap深入底层原理解析
这次主要是分析下HashMap的工作原理,为什么我会拿这个东西出来分析,原因很简单,以前我面试的时候,偶尔问起HashMap,99%的程序员都知道HashMap,基本都会用Hashmap,这其中不仅仅包括刚毕业的大学生,也包括已经工作5年,甚至是10年的程序员。HashMap涉及的知识远远不止put和get那么简单。本次的分析希望对于面试的人起码对于面试官的问题有所应付
|
11月前
|
存储 Java Serverless
HashMap底层原理
1. 基本概念 2. HashMap 的底层数据结构 3. HashMap 的 put 方法流程 4. 怎么计算节点存储的下标 5. Hash 冲突 1)概念 2)解决 hash 冲突的办法 开放地址法 再哈希法 链地址法 建立公共溢出区 6. HashMap 的扩容机制 1)扩容时涉及到的几个属性 2)扩容的条件 3)扩容的简要流程
62 0
|
存储
HashMap源码解读(下篇)
HashMap源码解读(下篇)
78 0
HashMap源码解读(下篇)
|
存储 Java 对象存储
HashMap源码解读(上篇)
HashMap源码解读(上篇)
91 0
HashMap源码解读(上篇)
|
存储 机器学习/深度学习 Java
HashMap源码解读(面试题剖析)
HashMap源码深度剖析,对几个有意思的方法进行了分析,如初始化容量如果转换为2的n次幂,扩容过程,存储和获取对象方法,以及面试题的总结
99 0
HashMap源码解读(面试题剖析)
|
存储 缓存 算法
简述HashMap的原理
简述HashMap的原理