看看头条

常见Java问题(五十五)——ArrayList如何序列化

我们知道在ArrayList内部是用数组实现的。如下所示:

private transient E[] elementData;

可是问题来了,这样的话,如何实现序列化呢?因为我们知道用transient修饰的变量是不会序列化的,但是我们会经常看到ArrayList序列化。

我就不卖关子了,在ArrayList源码中,有一个方法是writeObject。如下所示:

常见Java问题(五十五)——ArrayList如何序列化

显然:答案已经出来了,ArrayList自己写了个方法来对数组elementData中的元素挨个序列化,这么做的原因也很简单,因为ArrayList会涉及扩容的问题,而序列化会用到很多资源,于是如果你一次序列化完,有很多为空的坐标也会遍历,拖累了效率。不得不佩服,写jdk源码的人真是吊。

都是基础知识,大牛请走开!!!

|\n|\r

赞 (0)
分享到:更多 ()