集合内之部原理总结

ArrayList 
1. 构造方法
new Arraylist(size) 
if size ==0  {} 
else if size>0 new Object[size];

2. default CAPACITY 10

扩容:
1.构造方法进行扩容 
2.add grow方法 1.5倍。

HashSet 
1. 构造方法
Math.max((int) (c.size()/.75f) + 1, 16) 16 或者是 size/0.75 +1 这是为了离散分布。

2. 底层是hashmap 结构 map.put(e, PRESENT);

HashMap 
1.自增因子是0.75
2.默认容量是16当HashMap中元素数超过容量*加载因子时,HashMap会进行扩容


Hash 避免冲突的方法:
1.开放地址法:开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入 。
2.再哈希法:地址冲突了,进行地址再hash。
3.链地址法: 数组的节点延伸外部节点成为链表结构。


rehash()
0.75*size() 
当哈希表中的条目数超出了加载因子与当前容量的乘积时,并且要存放的位置已经有元素了(hash碰撞),必须满足两个条件才会扩容。
增长量为2倍

ConcurrentHashMap
  
put 方法加锁锁的对象是hash 数组的node。
get 方法没有加锁,volatile 。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值