一、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,对应的索引为:4
int 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] + ",");
}
}
}
输出结果