Java集合

126 阅读1分钟

HashMap中的几个要点

什么是装填因子

它是哈希表中元素数与哈希表长度的比值 a=元素数/哈希表长度

HashMap中的装填因子定为0.75
扩容:是要先申请一个长度为原来两倍的新数组,将原来的数据从旧数组中重新散列到新的数组中(Rehash)

重新散列操作涉及到大量元素的移动,比较消耗性能,因此应该尽量避免Rehash,比如先预估元素个数,指定哈希表的长度等

红黑树结构

当数组长度大于64且链表长度大于8,会转为红黑树结构

红黑树是一种能够自平衡的二叉排序树

二叉排序树:节点有左子树,那么左子树上的元素都要比节点元素小,右子树元素都要比节点元素大

平衡二叉树:左子树和右子树的深度绝对值之差不大于1,且左子树和右子树也满足这一条件

性质:
1.每个节点要么是红色,要么是黑色 2.根节点是黑色 3.每个叶子节点是黑色 4.每个红色节点的两个子节点一定都是黑色 5.任意节点到每个叶子节点的路径都包含数量相同的黑节点

扩容为什么是2的倍数

HashMap的长度为2的幂次方的原因是为了减少Hash碰撞,尽量使Hash算法的结果均匀分布。