Java HashMap
说明
此文档所介绍的HashMap是基于JDK1.8之后的。此文受到网上很多其他Java生态爱好者文章的影响,写此文的目的是系统的由浅入深介绍下HashMap。在此感谢优秀文章作者的启发,由于自身实力有限,若有纰漏之处还请评论指导。
原理(参考[1][3])
HashMap类似于HashTable,本质都是存储的键值对,也就是key、value,key用作存储初始索引,通过对其进行一系列运算把value映射存储到底层数据结构中。其存储的数据结构(JDK 1.8之后)如下:
- 数据结构

如上图所示,每个数组是有存储的是一个链表或者红黑树(视情况而定) * 数组 * 链表 * 红黑树
- 存储过程
graph LR;
key-->|进行Hash运算|key的hash值;
key的hash值-->|和hashMap的长度length-1进行&运算|数组下标index;
数组下标index-->|根据index存储该Entry也就是key, value|该index的数组;
* 对key进行hash运算,得到key的hash值。 * 把key的hash值和hashMap的长度length进行&运算,得到index,index即为数据的索引地址,例如0,1,2,3。 * 把value存到
扩容(参考[2])
性能(参考[4])
存储长度设为2的整数次幂
负载因子
实践案例
参考文章
- [1]https://blog.csdn.net/weixin_45290108/article/details/100056621
- [2]https://blog.csdn.net/wohaqiyi/article/details/81448176
- [3]https://blog.csdn.net/woshimaxiao1/article/details/83661464
- [4]https://blog.csdn.net/cnq2328/article/details/60783708
来源:https://www.cnblogs.com/zhoujunjie/p/12262296.html
