ArrayList扩容机制、fail-fast与fail-safe

扩容机制底层先创建了一个长度为0的数组,当添加第一个元素的时候,初始化容量为10

  • ArrayList() 无参会使用长度为0的数组;
  • ArrayList(int initialCapacity) 会使用指定容量的数组;
  • public ArrayList(Collection<? extends E> c) 会使用集合c的大小作为数组容量;
  • add(Object o) 首次扩容为10,再次扩容为上次容量的1.5倍;
  • addAll(Collection c) 没有元素时,扩容为Math.max(10,实际元素个数),有元素时为Math.max(原容量1.5倍,实际元素个数)

fail-fast与fail-safe

  • fail-fast :一旦发现遍历的同时其他人来修改,则立即抛出异常——ArrayList是fail-fast的典型代表,遍历的同时不能修改;
  • fail-safe :发现遍历的同时其他人来修改,应当能有应对策略,例如牺牲一致性来让整个遍历运行完成——CopyOnWriteArrayList是fail-safe的典型代表,遍历的同时可以修改,原理是读写分离
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值