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方法来实现。可以避免序列化空的元素。