前言
Linus Benedict Torvalds : RTFSC – Read The Funning Source Code
概述
Resizable-array implementation of the List interface. Implements all optional list operations, and permits all elements, including null. In addition to implementing the List interface, this class provides methods to manipulate the size of the array that is used internally to store the list. (This class is roughly equivalent to Vector, except that it is unsynchronized.) 翻译:List接口的可调整大小的数组实现。 实现所有可选列表操作,并允许所有元素,包括null。 除了实现List接口之外,该类还提供了一些方法来操作在内部使用来存储列表的数组的大小。 (这个类大致相当于Vector,除了它是不同步的。)
结构:
- 是一个数组队列,相当于动态数组。与Java中的数组相比,它的容量能动态增长。默认构造函数的容量为10,在增加的时候增加值为旧值的一半。
- 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。
- 实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在ArrayList中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。
- 实现了Cloneable接口,即覆盖了函数clone(),能被克隆。
- 实现java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输。
ArrayList 非线程安全,尽量在单线程使用。
使用
|
|
遍历方式
|
|
增长度
|
|
增长幅度为旧的容量+旧容量的一半。
在增长的时候会把原容器内容拷贝到新容器。
特性
优点
- 基于数组实现,对于遍历来说方便于查找和添加。
缺点
- 在增长的时候把原容器内容拷贝到新容器在大数据的情况下会耗时长,而且浪费旧的容器内存。
- 非线程安全,在多线程情况下容易导致崩溃。
- 对于从中间删除的效率太差。