ArrayList是一个动态数组,能够自动增长容量,线程不安全,适用于单线程,在多线程的情况下,推荐使用Collection.synchronizedList(List list)返回一个ArrayList进行使用,或者是直接使用concurrent并发包里面的CopyOnWriteArrayList:
ArrayList实现了四个接口:
List:
Cloneable:实现克隆功能
Serializable:实现序列化接口
RandomAccess:实现随机读写
ArrayList常量:
final long serialVersionUID = 8683452581122892189L;//定义序列化id
final int DEFAULT_CAPACITY = 10;//定义初始化容量
final Object[] EMPTY_ELEMENTDATA = {};//定义空数组实例
final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};//定义默认的空数组实例
ArrayList变量:
transient Object[] elementData; //存储ArrayList的缓冲区数组,== DEFAULTCAPACITY_EMPTY_ELEMENTDATA可用来清除缓冲区,不需要进行序列化
private int size;//数组大小
构造方法:
方法一:指定容量构造参数
public ArrayList(int initialCapacity) {
if (initialCapacity > 0) {
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) {
this.elementData = EMPTY_ELEMENTDATA;
} else {
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
}
}
方法二:默认初始容量构造方法
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;//创建默认初始容量的数组大小
}
方法三:将其他集合转化为ArrayList
public ArrayList(Collection<? extends E> c) {//将其他结构转化为一个数组
elementData = c.toArray();//将一个集合对象转化为数组
if ((size = elementData.length) != 0) {//如果长度不为空
// c.toArray might (incorrectly) not return Object[] (see 6260652)
if (elementData.getClass() != Object[].class)//判断对象类型
elementData = Arrays.copyOf(elementData, size, Object[].class);
} else {
// replace with empty array
this.elementData = EMPTY_ELEMENTDATA;
}
}
常用公有方法:
ensureCapacity(int minCapacity):增大容量
trimToSize:去除多余的空间(存储容量1200,实例1000,调用之后容量改为1000)
未完待续