ArrayList Object[]
无参构造创建时,分配内存 默认没有元素, 调用add方法时,分配10个元素的内存.
其后在达到最大容量时, grow到 当前容量+当前容量右移一位 = 1.5倍
HashMap Node[]
无参构造创建时,分配内存 默认没有元素,仅设置扩容因子0.75.
调用put方法时,对key计算hashCode , 分配 1>>4 16个元素的内存.
Node链表添加元素后达到8时, 转换成红黑树结构 [new TreeNode()]
hashCode 降低Hash冲突:
1.native的hashCode方法
2.异或 hashCode右移16位的结果,使得length较小的key高低bit都参与运算
3.(length-1)&Hash的价值[当length是2的n次幂时候, (length-1)&hash结果等于 (length-1)%hash 因为与运算比取余效率高]
为了保证等式成立,HashMap扩容时,每次扩容2倍.
get方法 对传入参数求hash, (length-1)&hash 获取到Node节点,判断第一个节点值之后, 对普通链表和红黑树进行遍历搜索
本文深入探讨了ArrayList和HashMap的数据结构及操作原理。ArrayList在无参构造时默认不分配元素,调用add方法时初始化容量为10,并在达到容量上限时自动扩容至1.5倍。HashMap同样在无参构造时默认不分配元素,调用put方法时计算key的hashCode并初始化容量为16。此外,详细解释了hashCode如何通过异或操作提高散列效率,以及HashMap在链表长度达到8时转换为红黑树的机制。
733

被折叠的 条评论
为什么被折叠?



