Java Arraylist实现原理.

来源:互联网 发布:ni数据采集卡使用入门 编辑:程序博客网 时间:2024/05/16 23:36

嗯,,深入了解下关于底层的实现原理。

首先 数组是这样的。

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 stuffint 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 具体看这篇 (逃