Java HashMap的原理、扩容机制、以及性能思考
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])