public class ArrayList<E> extends AbstractList<E>i mplements List<E>, RandomAccess, Cloneable, Serializable
ArrayList是一个实现了List 接口的大小可变的array。实现了所有可选list操作,并包含了允许 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作array的大小,这里的array大小指内部用来存储list的大小。(此类大致上等同于 Vector 类,除了此类是不同步的。)
这些操作如size、isEmpty、get、set、iterator 和 listIterator 都以固定时间运行(run in constant time)。add 操作以分摊的固定时间运行,也就是说,添加 n 个元素需要 O(n) 时间。其他所有操作都以线性时间运行(大体上讲)。与用于 LinkedList 实现的常数因子相比,此实现的常数因子较低。
每个 ArrayList 实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素,其容量也自动增长。并未指定增长策略的细节,因为这不只是添加元素会带来分摊固定时间开销那样简单。
ArrayList中只能存放对象,并且取值时是运行时判断而非编译时判断,即只有在运行时才能知道想要获取的对象和真正取出来的对象是否一致,是否会抛出异常。
ArrayList:我们可以将其看作是能够自动增长容量的数组,也可以说ArrayList是对象引用的一个变长数组。数组列表以一个原始大小被创建。当超过它的大小,类集自动增大。当对象被删除后,数组就可以缩小。
利用ArrayList的toArray()返回一个数组。
Arrays.asList()返回一个列表。
迭代器(Iterator)给我们提供了一种通用的方式来访问集合中的元素。
ArrayList有如下的构造函数:
ArrayList():建立一个空的数组列表。
ArrayList(Collection c):建立一个数组列表,该数组列表由类集c中的元素初始化。
ArrayList(int capacity):建立一个数组列表,该数组有指定的初始容量(capacity)。容量是用于存储元素的基本数组的大小。当元素被追加到数组列表上时,容量会自动增加。
几个特殊方法:
void add(int index, E element)
将指定的元素插入此列表中的指定位置。
boolean addAll(int index, Collection<? extends E> c)
从指定的位置开始,将指定 collection 中的所有元素插入到此列表中。
boolean remove(Object o)
移除此列表中首次出现的指定元素(如果存在)。
protected void removeRange(int fromIndex, int toIndex)
移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之间的所有元素。