Java 为什么AbstractLinkedList中的属性是暂时的?

Java 为什么AbstractLinkedList中的属性是暂时的?,java,collections,apache-commons,Java,Collections,Apache Commons,我正在阅读apachecommons源代码,以成为一名更好的程序员。我在AbstractLinkedList中注意到: transient Node<E> header; /** The size of the list */ transient int size; /** Modification count for iterators */ transient int modCount; 瞬态节点头; /**列表的大小*/ 瞬时整数大小; /**迭代器的修改计数*/ 瞬时整

我正在阅读apachecommons源代码,以成为一名更好的程序员。我在
AbstractLinkedList
中注意到:

transient Node<E> header;

/** The size of the list */
transient int size;

/** Modification count for iterators */
transient int modCount;
瞬态节点头;
/**列表的大小*/
瞬时整数大小;
/**迭代器的修改计数*/
瞬时整数模计数;

我们不需要序列化/反序列化它们吗?

如果您的类实现了
可序列化接口,默认情况下,在序列化对象时,所有非瞬态属性都作为自定义二进制流写入。但是,如果您希望对“序列化数据”的写入方式有更多的控制,则通常会将“依赖于实现的”属性标记为trasient,并为该特定类实现自己的自定义
readObject
/
writeObject
方法


为了证明这一点,,您会发现,
doReadObject
doWriteObject
分别被重写的
readObject
writeObject
方法调用。

我不能确定地说,但大多数情况下,我们看到这一点是因为瞬态数据只是为了在使用过程中提供更好的性能。它是在反序列化之后重建的,无论是在反序列化过程中,还是在反序列化之后的第一次使用中。不一定-我没有查看源代码,但是可以从反序列化过程中读取的元素数恢复大小,
modCount
可能是0,并且
标题与读取的第一个元素相同。@GlennLane知道了,我想知道这3个属性是否真的会影响performance@Andreas我明白了,没想到!阅读源代码5分钟,我已经很惊讶了。非常感谢。