首页 > 应用开发 > Java > ArrayList源码阅读笔记
源码分析
属性
首先看看ArrayList的属性。
/**
* 默认初始化容量
*/
private static final int DEFAULT_CAPACITY = 10;
/**
* 空数组,如果传入的容量为0时使用
*/
private static final Object[] EMPTY_ELEMENTDATA = {};
/**
*空数组,传传入容量时使用,添加第一个元素的时候会重新初始为默认容量大小
*/
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
/**
*存储数据元素的数组
*/
transient Object[] elementData; // non-private to simplify nested class access
/**
* ArrayList的大小(包含数据元素的个数)
*/
private int size;
构造方法
无参构造方法
/**
* 创建一个初始容量为10的空列表
*/
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
1234567
指定初始容量的构造方法
/**
* 创建一个指定容量的list
*/
public ArrayList(int initialCapacity) {
// 如果传入的初始容量大于0,就新建一个数组存储元素
if (initialCapacity > 0) {
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) {
// 如果传入的初始容量等于0,使用空数组EMPTY_ELEMENTDATA
this.elementData = EMPTY_ELEMENTDATA;
} else {
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
}
}
从其它集合构造
/**
* 把传入集合的元素初始化到ArrayL ist中 郑州祛胎记医院哪家好 http://www.zykdtj.co m/
*/
public ArrayList(Collection c) {
//把集合转为数组
elementData = c.toArray();
if ((size = elementData.length) != 0) {
// 检查c.toArray()返回的是不是Object[]类型,如果不是,重新拷贝成Object[].class类型
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
} else {
// 如果是空集合,则初始化为空数组EMPTY_ELEMENTDATA
this.elementData = EMPTY_ELEMENTDATA;
}
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69979119/viewspace-2712553/ ,如需转载,请注明出处,否则将追究法律责任。