先看声明transient Object[] elementData;
elementData被声明为transient ,也就是说如果采用默认的序列化方式,elementData不会被序列化。这样设计的原因是,对于初始化为空ArrayList,在添加第一个元素时其长度会被设置成10,对于ArrayList中添加元素小于10个的场景,默认的序列化方式会序列化10个对象(包括null),通过writeObject/readObject的方式避免的空间的浪费。
s.defaultWriteObject();这一步是将ArrayList中除了transient的其他数据序列化