Java 集合类型之ArrayList 源码解析
层次结构
顶层层次结构
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之家,以及访问我的优酷空间!
出处:http://www.cnblogs.com/kmsfan
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
欢迎大家加入KMSFan之家,以及访问我的优酷空间!