层次结构
顶层层次结构
ArrayList实际上是继承了AbstractList,同事实现了List,RandomAccess,Clonable,Serializable序列化接口。
AbstractList
AbstractList抽象类继承了AbstractCollection并实现了List接口,其中AbstractCollection实现了Collection接口。
ArrayList源码分析
属性
1 private static final int DEFAULT_CAPACITY = 10; //默认容量
private static final Object[] EMPTY_ELEMENTDATA = {}; //共享空数组实例为空的实例们使用。
//为默认的空实例准备的共享的空数组实例。我们区别于EMPTY_ELEMENTDATA以辨别膨胀多少当第一个元素被添加的时候。
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
//这个数组缓冲区进入数组的元素被存储。
//数组的容积是数组缓冲区的长度。
//任何空的数组带数组元素等于DEFAULTCAPACITY_EMPTY_ELEMENTDATA会被展开到DEFAULT_CAPACITY当数组当中第一个元素被添加进去。
transient Object[] elementData;//非私有被简化嵌套类的访问
private int size;//数组的大小(有多少元素它包含)
方法
//构造一个空的ArrayList带10的初始化长度。
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
/*
构造一个list包含集合选择的一些元素,在这个队列当中,它们被集合的迭代器返回。
param c 这个集合谁的元素被放入list当中
throws NullPointerException 如果指定的集合为空
*/
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
if ((size = elementData.length) != 0) {
// c.toArray(错误的)不返回数组对象。
// (see e.g. https://bugs.openjdk.java.net/browse/JDK-6260652)
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
} else {
//被替代为空数组
this.elementData = EMPTY_ELEMENTDATA;
}
}

作者:
KMSFan
出处:http://www.cnblogs.com/kmsfan
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
欢迎大家加入KMSFan之家,以及访问我的优酷空间!