Java 基础-06:ArrayList 扩容机制

一、扩容机制

1. ArrayList() 会使用长度为零的数组

2. ArrayList(int initialCapacity) 会使用指定容量的数组

3. public ArrayList(Collection<? extends E>c) 会使用c 的大小作为数组容量

4.add(Object o)首次扩容为10,再次扩容为上次容量的1.5倍

5.addAll(Collection c) 没有元素时,扩容为Math,max(10,实际元素个数),有元素时为Math.ma(原容量的1.5倍,实际元素个数

二、fail-fast 与 fail-safe

ArrayList是fail-fast的典型代表,遍历的同时不能修改,尽快失败

CopyOnWriteArrayList 是 fail-safe 的典型代表,遍历的同时可以修改,原理是读写分离

三、ArrayList 与 LinkedList 比较

1、ArrayList

① 基于数组,需要连续内存

② 随机访问快(指根据下标访问)

③ 尾部插入、删除性能可以,其它部分插入和删除都会移动数据,因此性能会低

④ 可以利用cpu 缓存,局部性原理

2、LinkedList

① 基于双向链表,无需连续内存

② 随机访问慢(要沿着链表遍历)

③ 头尾插入删除性能高

④ 占用内存多

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值