面试官:ArrayList怎么序列化的知道吗?

481 阅读1分钟

面试官: 你对ArrayList结构和特性了解的还不错,那你再说说ArrayList是怎么序列化的?

小六: 嗯~~~这个....(小六的脑袋瓜滴遛滴遛地转)

小六: 噢是这样的,ArrayList存储元素的数组变量是被transient关键字修饰的,被transient修饰就意味着这个变量不会被序列化的,因为ArrayList实现了Serializable接口,并且定义了writeObject(ObjectOutputStream s)方法和readObject(ObjectInputStream s)方法,所以ArrayList就会通过定义的这两个方法来进行序列化和反序列化的。

面试官: 嗯,不错!那你知道ArrayList为什么不直接序列化元素数组呢?

小六: 出于对效率的考虑呗,比如说数组的容量是100,但此时只存储了50个元素,而剩下的50其实是不需要序列化的,这样不仅能提高序列化和反序列化的效率,而且也会节省一些内存。

面试官: 不错,看来你对ArrayList掌握的非常透彻!!!

小六此时内心在说:源码我可是看了好几遍的呢,你可问不倒我的)。。