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节点,判断第一个节点值之后, 对普通链表和红黑树进行遍历搜索