ArrayList简介
ArrayList是一个数组队列,相当于动态数组。与Java中的数组相比,它的容量能动态增长。
比较:
数组是静态的,数组被初始化之后,数组长度就不能再改变了。
ArrayList是可以动态改变大小的。
建议:
当我们不知道,具体数组元素时,可用ArrayList;如果知道具体数组集合有多少元素,用数组。
关系:
它继承于AbstractList,实现了List,RandomAccess,Cloneable,java.io.Serializable接口。
ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。
ArrayList 实现了RandmoAccess接口,即提供了随机访问功能,RandmoAccess是java中用来被List实现,为List提供快速访问功能的,在ArrayList中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。
ArrayList 实现了Cloneable接口,即覆盖了函数clone(),能被克隆。
ArrayList 实现java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输。
和Vector不同,ArrayList中的操作不是线程安全的!所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOnWriteArrayList。
ArrayList的方法使用和源码解析
一、构造方法
//1-----------------------
public ArrayList() {
this(10);
//调用ArrayList(10) 默认初始化一个大小为10的object数组。
}
//2-------------------------
public ArrayList(int initialCapacity) {
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
//如果用户初始化大小小于0抛异常,否则新建一个用户初始值大小的object数组。
this.elementData = new Object[initialCapacity];
}
//3--------------------------
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
size = elementData.length;
// 当c.toArray返回的不是object类型的数组时,进行下面转化。
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
}
ArrayList类支持3个构造方法
Arraylist()
这个构造方法构造了一个空的链表。ArrayList(Collection<? extends E> c)
这个构造方法构造了一个包含指定元素集合的链表,注意,这里的字符