上面的代码是从System.Collections.Generic下扒出来的,我们看第一个图片中的代码 private const int _defaultCapacity = 4;这里我们可以看到,当我们不设置list的初始大小时默认会设置为4,并且可以看出来,list内部是以数组的方式进行存储的,

我们来看第二张图片的算法,这个就是list扩容的算法,当数据长度大于初始化长度时,list会每次将数组长度*2,就是扩大到原来的两倍,并且在扩容后会将原始的数据复制到新的内存空间中。

第三张图的算法从名字我们就可以看出来他的作用是收缩存储空间的,当空余的存储空间超过10%时,系统会将容量收缩到原来的0.9倍

其他的因为时间关系就暂时不说了,后续会详细补充,有疑问的可以在线交流,有错误的地方还望指教。

这里是 ArrayList源码剖析,地址:

http://blog.csdn.net/exiaojiu/article/details/51190926?ref=myread,感谢作者的贡献,希望会帮到大家。


本文转载:CSDN博客