特点:
重复性:数据可以重复
null值:可以有null值存在
有序性:能保证数据插入有序
继承关系
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
ArrayList继承AbstractList,父类中对部分接口进行实现
实现了List接口提供的方法,Serializable说明该类能够被序列化 ,能够被克隆、序列化
底层数据结构 —> 数组
构造函数(3个)
//有参构造,指定集合初始化大小
public ArrayList(int initialCapacity) {
super();
//指定大小不合法,则直接抛出异常
初始化数组大小
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
}
//无参构造
public ArrayList() {
super();
this.elementData = EMPTY_ELEMENTDATA;
}
//有参构造,通过集合来创建新的集合
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
size = elementData.length;
//c.toArray might(incorrectly)not return Object[](see 6260652)
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
}
基本属性
private static final int DEFAULT_CAPACITY = 10;
默认容量大小
private static final Object[] EMPTY_ELEMENTDATA = {};
默认数组大小
private transient Object[] elementData;
存储元素的数组
private int size;
集合存储元素的个数
默认值 数组默认值:10
增长方式 按照原数组的1.5倍进行扩容
add()添加元素
首先需要进行扩容考虑,如果要扩容(size+1 > table.lengrh),按照1.5倍进行扩容
将元素插入数组尾部,并对计数size+1
public boolean add(E e)