创建时没有指定大小,默认是10,如果是0则会创建空数组,最大长度是integer最大值-8。扩展因子是1,扩展大小是原来大小加上原来大小右移一位
ArrayList底层是数组,所以每次添加都会判断大小是否足够,不够时会扩容,新的大小等于原来大小加上原来大小右移一位
扩容的时候,会以新的容量建一个原数组的拷贝,修改原数组,指向这个新数组,原数组被抛弃,会被GC回收。
System.arraycopy方法
System中提供了一个native静态方法arraycopy(),可以使用这个方法来实现数组之间的复制。对于一维数组来说,这种复制属性值传递,修改副本不会影响原来的值。对于二维或者一维数组中存放的是对象时,复制结果是一维的引用变量传递给副本的一维数组,修改副本时,会影响原来的数组。