Java HashMap
说明
此文档所介绍的HashMap是基于JDK1.8之后的。此文受到网上很多其他Java生态爱好者文章的影响,写此文的目的是系统的概括下HashMap,并把一些优秀文章的脉络连接起来起到目录作用。在此感谢优秀文章作者的启发,由于自身实力有限,若有纰漏之处还请评论指导。
原理(参考[1][3])
HashMap类似于HashTable,本质都是存储的键值对,也就是key、value,key用作存储初始索引,通过对其进行一系列运算把value映射存储到底层数据结构中。其存储的数据结构(JDK 1.8之后)如下:
数据结构(引用[1])
如上图所示,每个数组是有存储的是一个链表或者红黑树(视情况而定)
* 数组
* 链表
* 红黑树
存储过程
对key进行hash运算,得到key的hash值。
把key的hash值和hashMap的(length-1)进行&运算,得到index,index即为数据的索引下标,例如0,1,2,3。
根据索引下标,把该Entry存到对应的数据结构中。
计算索引下标,也就是keyHash&(length-1)时,不同的keyHash会产生同样的索引下标,也就是说一个数组元素可能会存储多个数据