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没有红黑树这些优化。
来源:CSDN
作者:qq_37119960
链接:https://blog.csdn.net/qq_37119960/article/details/103885738