每天一个知识点(四)说一下 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


相关文章
|
存储 算法 安全
HashMap底层实现原理
HashMap底层实现原理
171 0
|
5月前
|
存储 算法 Java
【Java集合类面试八】、 介绍一下HashMap底层的实现原理
HashMap基于hash算法,通过put和get方法存储和获取对象,自动调整容量,并在碰撞时用链表或红黑树组织元素以优化性能。
|
3月前
|
存储 算法 安全
HashMap的实现原理,看这篇就够了
关注【mikechen的互联网架构】,10年+BAT架构经验分享。深入解析HashMap,涵盖数据结构、核心成员、哈希函数、冲突处理及性能优化等9大要点。欢迎交流探讨。
HashMap的实现原理,看这篇就够了
|
3月前
|
存储 算法 索引
HashMap底层数据结构及其增put删remove查get方法的代码实现原理
HashMap 是基于数组 + 链表 + 红黑树实现的高效键值对存储结构。默认初始容量为16,负载因子为0.75。当存储元素超过容量 * 负载因子时,会进行扩容。HashMap 使用哈希算法计算键的索引位置,通过链表或红黑树解决哈希冲突,确保高效存取。插入、获取和删除操作的时间复杂度接近 O(1)。
36 0
|
3月前
|
存储 算法 安全
HashMap常见面试题(超全面):实现原理、扩容机制、链表何时升级为红黑树、死循环
HashMap常见面试题:红黑树、散列表,HashMap实现原理、扩容机制,HashMap的jd1.7与jdk1.8有什么区别,寻址算法、链表何时升级为红黑树、死循环
|
8月前
|
存储 Java 索引
Java HashMap:设计思想与实现原理详解
Java HashMap:设计思想与实现原理详解
275 0
|
7月前
|
存储 算法 Java
HashMap 的实现原理
HashMap 的实现原理
|
存储 安全 Java
HashMap的实现原理
HashMap是非线程安全的,如果在多线程环境下使用HashMap,需要进行额外的同步操作或者使用线程安全的ConcurrentHashMap。
98 0
|
8月前
|
存储 算法 安全
认真学习Java集合之HashMap的实现原理
认真学习Java集合之HashMap的实现原理
79 0
认真学习Java集合之HashMap的实现原理
|
8月前
|
存储 算法
HashMap的实现原理
HashMap的实现原理