ArrayList的底层原理
ArrayList<String> list1 = new ArrayList<>();
list1.add("aaa");
list1.add("bbb");
//一次添加一个数据
ArrayList<String> list2 = new ArrayList<>();
list2.addAll(list1);//一次添加多个数据
1.当我们利用空参构造创建一个ArrayList对象时,java会在底层创建一个默认长度为0的数组
数组名为elementData 有一个成员变量为Size,用来记录元素的个数
2.当调用add添加第一个元素时,会在底层创建一个新的长度为是10的数组初始化值都为Null
是添加第一个元素这个数组才会出现
假如此时添加一个元素"a" 此时a进入数组,size++为1
此时size有两层含义:表示元数个数 也表示下次元素存入的位置;
假如添加方式为一个一个逐个添加:
当数组存满后会创建一个新的数组,新数组的大小会根据原来的数组大小自动扩容1.5倍,再把所有元素拷贝到新的数组,新数组存满后,会继续执行上面的操作,扩容1.5倍并拷贝原来的数组
假如以数组的方式进行添加,一次添加多个元素:
如果1.5倍还放不下,则新创建的数组的长度以实际为准;
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;//默认初始长度为0
}
ArrayList<String> List = new ArrayList<>();
list.add("aaa") //添加第一个元素