List list = new ArrayList();

在这段源码中,构造方法初始化了一个空数组。

关于ArrayList源码add部分解读

DEFAULTCAPACITY_EMPTY_ELEMENTDATA就是一个空数组。

在这个时候,list就只是一个空数组,size=0,length=0;

list.add("java");

在执行add操作的时候,size = 0,length=0

关于ArrayList源码add部分解读

当size+1 - length >0时,也就是此时我需要的容量大于数组的长度时就需要扩容了

关于ArrayList源码add部分解读


关于ArrayList源码add部分解读

到现在为止,一个长度为10的数据就诞生了。

elementData[size++] = “java”;
return true;

然后数组添加,size++,执行完成,返回true。

方法执行完成,此时状态,size=1,length=10;

当size+1>leng的时候就需要再次进行扩容,以length的1.5倍扩容

关于ArrayList源码add部分解读

然后添加完成,return true。

总结:如果我们初始化一个ArrayList,在构造方法中没有指定容量,那么这个ArrayList的容量就应该是0,而不是10。


相关文章: