ArrayList 是一个其容量能够 动态增长 的动态数组
继承关系图:
我们从源码角度看一下:
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable{
//默认容量大小
private static final int DEFAULT_CAPACITY = 10;
//指定ArrayList容量为0时返回该数组
private static final Object[] EMPTY_ELEMENTDATA = {};
//当没有指定ArrayList容量时返回该数组
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
transient Object[] elementData;
//ArrayList中元素数量
private int size;
总结
10 elementData
注意:可以看到elementData被 transient 标识,代表elementData无法被序列化,为什么要这么设置呢?
因为elementData里面不是所有的元素都有数据,因为容量的问题,elementData里面有一些元素是空的,这种是没有必要序列化的。
ArrayList的序列化和反序列化依赖writeObject和readObject方法来实现。可以避免序列化空的元素。