ArrayList中维护了一个Object类型的数组elementData。
transient Object[] elementData; // transient 表示瞬间,短暂的,表示该属性不会被序列化
ArrayList是线程不安全的
ArrayList的扩容机制
- 当创建ArrayList对象时,如果使用的是无参构造器,则初始elementData容量为0。第一次添加,则扩容elementData为10,如需要再次扩容,则扩容elementData为1.5倍。
- 如果使用的是指定大小的构造器,则初始elementData容量大小指定大小,如果需要扩容,则直接扩容elementData为1.5倍。
ArrayList是一个数组结构的存储容器,默认情况下,数组的长度是10。当然,我们也可以在构建ArrayList对象的时候,直接指定初始长度。那么,随着程序的运行,不断地往ArrayList中添加数据,当添加的数据达到10个的时候,ArrayList就没有足够的容量来存储后面添加的数据。那么,这个时候,ArrayList会触发自动扩容机制。
扩容的流程其实也很简单,首先创建一个新的数组,这个数组的长度是原来数组长度的1.5倍。然后,使用Arrays.copyOf()方法把原数组中的数据拷贝到新数组中。扩容完成之后,再把当前要添加的数据加入到新的数组中,从而完成动态扩容的过程。




