ArrayList和LinkedList详解(基于jdk1.8)
ArrayList集合
ArrayListList实现自AbstractList抽象类,是基于数组实现List接口的实现类。
特点:可以存储重复的数据,存入的数据是有序的(插入有序),可以存储NULL值。
ArrayList是线程不安全的,会抛出ConcurrentModificationException异常。
ArrayList源码解析
我们将从继承关系、属性、默认值、构造方法、扩容机制和常用方法等方式进行解析。
继承关系
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable,
java.io.Serializable
由上面的源码可以知道:ArrayList是继承自AbstractList,实现了List接口,随机访问、可复制和可序列化的接口。
属性
//序列化ID
private static final long serialVersionUID = 8683452581122892189L;
//使用有参构造方法时,当传入的初始容量为0,或者传入的集合为空时使用
private static final Object[] EMPTY_ELEMENTDATA = {
};
//使用无参构造方法时,保证有初始的容量
private static final Object[]DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {
};
//存储ArrayList中元素
transient Object[] elementData;
//ArrayList中元素的个数
private int size;
构造方法
//无参构造函数,使用默认容量
public ArrayList() {
此处省略}
//有参构造函数,放入初始容量
public ArrayList(int initialCapacity){
此处省略}
//有参构造函数,放入Collection接口下的集合
public ArrayList(Collection<? extends E> c){
此处省略