您的位置:首页 > 编程语言 > Java开发

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方法中手动将其序列化,并且只序列化了实际存储的那些元素,而不是整个数组
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐