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是线程不安全的,避免多线程共享
700

被折叠的 条评论
为什么被折叠?



