HashMap中的几个要点
什么是装填因子
它是哈希表中元素数与哈希表长度的比值 a=元素数/哈希表长度
HashMap中的装填因子定为0.75
扩容:是要先申请一个长度为原来两倍的新数组,将原来的数据从旧数组中重新散列到新的数组中(Rehash)
重新散列操作涉及到大量元素的移动,比较消耗性能,因此应该尽量避免Rehash,比如先预估元素个数,指定哈希表的长度等
红黑树结构
当数组长度大于64且链表长度大于8,会转为红黑树结构
红黑树是一种能够自平衡的二叉排序树
二叉排序树:节点有左子树,那么左子树上的元素都要比节点元素小,右子树元素都要比节点元素大
平衡二叉树:左子树和右子树的深度绝对值之差不大于1,且左子树和右子树也满足这一条件
性质:
1.每个节点要么是红色,要么是黑色
2.根节点是黑色
3.每个叶子节点是黑色
4.每个红色节点的两个子节点一定都是黑色
5.任意节点到每个叶子节点的路径都包含数量相同的黑节点
扩容为什么是2的倍数
HashMap的长度为2的幂次方的原因是为了减少Hash碰撞,尽量使Hash算法的结果均匀分布。