ArrayList底层实现及源码分析
1. ArrayList 底层是通过动态数组实现的。
2. ArrayList使用无参构造时,初始容量为0,当第一次添加数据时会初始化容量为10
3. ArrayList在进行扩容时按照每次1.5倍的增速增大容量,每次扩容都需要数据的copy
4. ArrayList添加数据的过程如下:
4.1 确保数组已使用长度 size + 1后足够存下下一个数据;
4.2 计算数组的容量,如果当前数组已使用长度 size + 1 后大于当前数组长度,则需要调用grow方法进行容量的1.5倍扩容。
4.3 确保新增的数据有空间进行存放之后,则正常在数组末尾添加数据。
4.4 添加成功返回 true
5. ArrayList源码分析





6. 数组与List的互转
6.1 数组转list Arrays.asList()方法。使用该方法后,修改原始数组,新的数组也会变化。
Arrays.asList底层使用了Arrays中的内部类ArrayList来构造集合,在这个集合的构造函数中,直接将参数中的数组赋值给了新的数组,在内存中都是指向同一个地址。
6.2 list转数组 List的toArray()方法,使用该方法后,修改原始数组,新的数组不会变化。
该方法的底层时System.arraycopy方法,进行了数组的copy,与原始数组无关。
