Java ArrayList,HashMap容器 简单原理说明

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

转载于:https://my.oschina.net/u/3674060/blog/3036834

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值