HashMap底层原理
向HashMap中存放一个元素(k1,v1),先根据k1做hash算法,然后将hash值映射到内存地址,直接获取key所对应的数据。如果这个位置没有其它元素,将(k1,v1)直接放入一个Node类型的数组中,默认HashMap初始大小16,负载因子0.75,负载因子是一个介于0和1之间的浮点数,它决定了HashMap在扩容之前内部数组的填充度。所以当元素加到12的时候,底层会进行扩容,扩容为原来的2倍。【HashMap扩容机制】还会提到在jdk1.7的时候,这个扩容机制会引发的一些问题。
如果该位置已经有其它元素(k2,v2),那就调用k1的equals方法和k2进行比较二个元素是否相同。
如果返回值为true,说明二个元素是一样的,用v1替换v2。
如果返回值为false,说明二个元素是不一样的,用链表的形式将(k1,v1)存放。
不过当链表中的数据较多时,查询的效率会下降,所以在JDK1.8版本后做了一个升级。
HashMap存储数据时,需要满足链表长度超过8,数组长度大于64,才会将链表替换成红黑树才会树化时,会将链表替换成红黑树,来提高查找效率。
总结
以上就是今天要讲的内容,还希望各位读者大大能够在评论区积极参与讨论,给文章提出一些宝贵的意见或者建议,合理的内容,我会采纳更新博文,重新分享给大家。