八股01 ArrayList

ArrayList

底层使用数组实现,适合随机访问,时间复杂度o(1),除了尾插,插入时间复杂度都为O(n)

add(E e);尾插

会先确保空间充足,再去插入,空间不足会自动扩容为原来的1.5倍

计算需要的容量,会判断是不是默认容量初始化的,如果是,要保证扩容后空间为默认初始容量和当前所需容量较大的一个


扩容为原来的1.5倍

add(int index, E e);插入到某个下标位置

范围检查,确保容量充足,将index之后的都向后移动一位,插入,size++;

List和数组转换

Arrays.asList(Object[] a);

本质是调用new ArrayList<>(a);

是直接将数组的引言赋值给底层数组,所以对原来数组的修改,会影响到list
 

list转数组

是拷贝了一份后返回,所以对原list的修改不会影响到数组

总结:

1. arraylist默认初始容量为10,容量不够会扩容为旧容量的1.5倍,扩容通过Arrays.copeOf实现,需要将旧数组的内容拷贝到新数组,非常耗时,所以已知可能需要多大容量时,直接初始化时指定容量,避免频繁扩容

2. ArrayList是线程不安全的,避免多线程共享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值