一、ArrayList(JDK7)
ArrayList 底层存储原理是数组,定义为: Object[] elementData
1.1、无参构造
相关代码如下: 
ArrayList 无参构造实例化后,内部的 Object [] 为空数组。(在添加元素的时候,才进行数组的初始化,节省空间)
1.2、带参构造
1.3、添加元素
1.3.1、add(E) 源码

上述代码得出几个结论:
- 添加元素,直接往数组末尾添加,复杂度(O(1))
- 实例化 ArrayList 实例时,未指定容器大小,默认为:10
- 容器的扩容倍数为原来容器大小的 1.5倍
-
1.3.2、add(int,E) 源码

上述得出结论,根据索引位置插入值,需要移动数据,复杂度为 O(n)1.4、移除
1.4.1、remove(Object)

从上述代码得出结论 -
二、ArrayList(JDK8)
ArrayList 底层存储原理是数组,定义为:
Object[] elementData
个别名称不同,其他基本与 1.7 同
三、其他
3.1、System.arraycopy 使用案例如下
public class StringDemo {public static void main(String[] args) {// 原来的数组:[1,2,3,4,6,7]// 现在往元素 4,6 之间插入 5,对应的索引为:4int index = 4;// 10 个元素的数组Object[] elementData = initElementData(10);System.arraycopy(elementData, index, elementData, index + 1,6 - index);elementData[index] = 5;// 插入之后的数组System.out.print("新数组:");printArr(elementData);}/** 初始化测试数组 **/private static Object[] initElementData(int initialCapacity) {Object[] elementData = new Object[initialCapacity];elementData[0] = 1;elementData[1] = 2;elementData[2] = 3;elementData[3] = 4;elementData[4] = 6;elementData[5] = 7;// 打印System.out.print("原数组:");printArr(elementData);System.out.println();return elementData;}/** 打印数组 **/public static void printArr(Object[] arr){for(int i = 0;i < arr.length; i++){System.out.print(arr[i] + ",");}}}
输出结果

