HashMap(JDK1.8)

北战南征 提交于 2020-01-08 12:13:51

1、HashMap存储的数据结构

数组+单向链表的储存方式
在这里插入图片描述
加载因子:0.75,当数组储存的数据量超过75%时进行扩容。数组初始化大小为16,16*0.75=12,使用到12的时候进行扩容(双倍扩容16–>32),扩容必须为2的n次幂,因为计算hash值的时候进行&运算时,要保证011111来进行。
单向链表转成红黑树,当链表中的数据大于8时转,当红黑树的节点少于6时变成单向链表。
二叉树有利于查找,左子树节点小于根节点。
在这里插入图片描述
实际源码中是使用&运算来得到0-15的值,因为&运算效率更高。
在这里插入图片描述
当然,为了防止运算的结果总是为一个值,在hsahCode运算时进行了高16位与低16位进行异或运算来使hash值尽可能不一样。
在这里插入图片描述
put操作
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在jdk1.7没有红黑树这些优化。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!