嗯,,深入了解下关于底层的实现原理。
首先 数组是这样的。
private transient Object[] elementData;
私有,不可序列化,Object。为什么要用transient修饰呢。因为容器的实际设计大小是比原来的大的。比如数组大小是8,容易可能设计成8*1.5=12。所以这样要是被序列化的话就会多浪费四个空间。当数组大小变大就会浪费更多的控件。所以设计者加入transient,使其不可被序列化。并且在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 array length
s.writeInt(elementData.length);
// 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();
}
}
可以看出是size而不是elements.length。说明只序列化数组大小的空间。避免了空间的浪费。
http://blog.csdn.net/jzhf2012/article/details/8540410 具体看这篇 (逃