ArrayList中elementData为什么使用transient关键字修饰呢?

璐璐 Java面经 发布时间:2022-10-27 23:07:41 阅读数:14136 1 集合容器面试题(2023优化版)
下文笔者讲述Arraylist源码中的elementData使用transient关键字修饰的缘由说明,如下所示

ArrayList源码定义

private transient Object[] elementData;

我们知道使用transient关键字修饰后
在数组序列化时,不会将elementData字段序列化
那是因为ArrayList在序列化时,会调用writeObject方法
 只序列化已存入的元素,这样可减少序列化后的体积
 也提高了运行效率
例:
ArrayList重写了writeObject方法
writeObject()方法是每次序列化时调用的方法
  
private void writeObject(java.io.ObjectOutputStream s)
   throws java.io.IOException{
   // Write out element count, and any hidden stuff
   int expectedModCount = modCount;
   s.defaultWriteObject();

   // Write out size as capacity for behavioural compatibility with clone()
   s.writeInt(size);

   // Write out all elements in the proper order.
   for (int i=0; i<size; i++) {
       s.writeObject(elementData[i]);
  }

   if (modCount != expectedModCount) {
       throw new ConcurrentModificationException();
  }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaMianJing/202210/16668842534732.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者