java的ArrayList中,数组为什么被transient修饰,这是因为什么原因而设计出来的?
2012-07-03 00:51
666 查看
在java的arrayList中,定义了一个数组用来装载对象的,其定义为
private transient Object[]elementData;
transient用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。我的理解就是用这个修饰只是在操作留得时候,被transient修饰的数据不输出,但是arrayList中的数组用transient修饰是出于什么样的设计思想呢?他考虑到什么了才这样设计的呢?
看得出楼主的观察很细致,思考问题也很认真。
楼主这么考虑就能明白为什么要这么设计了:
elementData是一个缓存数组,它通常会预留一些容量,等容量不足时再扩充容量,这个楼主一定是明白的,不用多解释。
假如现在实际有了5个元素,而elementData的大小可能是10,那么在序列化时只需要储存5个元素,数组中的最后五个元素是没有实际意义的,不需要储存。
所以ArrayList的设计者将elementData设计为transient,然后在writeObject方法中手动将其序列化,并且只序列化了实际存储的那些元素,而不是整个数组
private transient Object[]elementData;
transient用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。我的理解就是用这个修饰只是在操作留得时候,被transient修饰的数据不输出,但是arrayList中的数组用transient修饰是出于什么样的设计思想呢?他考虑到什么了才这样设计的呢?
看得出楼主的观察很细致,思考问题也很认真。
楼主这么考虑就能明白为什么要这么设计了:
elementData是一个缓存数组,它通常会预留一些容量,等容量不足时再扩充容量,这个楼主一定是明白的,不用多解释。
假如现在实际有了5个元素,而elementData的大小可能是10,那么在序列化时只需要储存5个元素,数组中的最后五个元素是没有实际意义的,不需要储存。
所以ArrayList的设计者将elementData设计为transient,然后在writeObject方法中手动将其序列化,并且只序列化了实际存储的那些元素,而不是整个数组
相关文章推荐
- ArrayList中的数组为什么被transient修饰
- 纠结了很久,不知道为什么除了什么原因,用任何方查都查不到根源,后来ArrayList存放了Bitmap,结果出错了,终于找到了事情的根源,一阵无语,不能存放竟静态的,为什么不提示呢, 害我以为是那些自
- 用transient修饰的成员变量不能序列化,为什么ArrayList集合可以实现序列化
- ArrayList中elementData为什么被transient修饰?
- java中ArrayList中为什么elementData使用了transient
- 【JAVA学习】java中==、equals()、hashCode()都和对象的比较有关,在java中这三者各有什么用处呢,即java中为什么需要设计这三种对象的比较方法呢?
- ArrayList的数组声明为transient却依旧序列化的原因
- ArrayList的elementData为什么要修饰为transient?
- ArrayList的elementData为什么要用transient修饰
- 2018/01/08JAVA 基础 / 接口与继承/Object类——[思考?question:Object类的方法有什么用?为什么不直接在类中设计方法?
- ArrayList中为什么使用transient修饰elementData?
- 急求高手帮忙解决,Java Script Error Description缺少对象,是什么原因,为什么我的网站老是出现这个问题
- Java 有几程方法可以实现一个线程?用什么关键字修饰同步?stop()和suspend()为什么不推荐使用?
- 为什么要设置JAVA_HOME、Path、CLASSPATH、CATALINA_HOME 配置 原因 是什么!
- 黑马程序员--读写字节数组,随机读写流,集合IO的思维导图,多线程部分,单例设计模式,线程和进程的概念,Java中的线程的创建方式,线程的随机性,线程的状态图,多线程操作共享数据的安全性,死锁
- java中申请不定长度数组ArrayList
- 为什么Java要把字符串设计成不可变的
- java中String类为什么要设计成final
- 发动机磨损的主要原因是什么 发动机为什么会磨损
- 什么是异常,我们为什么要关心它--The Java Tutorial--Exception第一节