ArrayList 中的數(shù)組定義如下:
private transient Object[] elementData;
再看一下 ArrayList 的定義:
可以看到 ArrayList 實(shí)現(xiàn)了 Serializable 接口,這意味著 ArrayList 支持序列化。transient 的作用是說(shuō)不希望 elementData 數(shù)組被序列化,重寫了 writeObject 實(shí)現(xiàn):
每次序列化時(shí),先調(diào)用 defaultWriteObject() 方法序列化 ArrayList 中的非 transient 元素,然后遍歷 elementData,只序列化已存入的元素,這樣既加快了序列化的速度,又減小了序列化之后的文件大小。