JavaSE
  1. util
JavaSE
  • rt.jar
    • java
      • lang
        • String.java
      • util
        • ArrayList.java
        • Iterable.java
        • Collection.java
        • List
          • List.java
  1. util

ArrayList.java

备注
List 接口的可调整大小的数组实现。实现所有可选列表操作,并允许所有元素,包括 null。除了实现 List 接口外,此类还提供了一些方法来操作内部用于存储列表的数组的大小。(此类大致相当于 Vector,只是它是不同步的。)
size、isEmpty、get、set、iterator 和 listIterator 操作以恒定时间运行。add 操作以摊销的恒定时间运行,也就是说,添加 n 个元素需要 O(n) 时间。所有其他操作都以线性时间运行(大致来说)。与 LinkedList 实现相比,此类的常数因子较低。
每个 ArrayList 实例都有一个容量。容量是用于存储列表中元素的数组的大小。它总是至少与列表大小一样大。当元素添加到 ArrayList 时,其容量会自动增长。除了添加元素具有恒定的摊销时间成本这一事实外,未指定增长策略的详细信息。
应用程序可以使用 ensureCapacity 操作在添加大量元素之前增加 ArrayList 实例的容量。这可能会减少增量重新分配的量。
注意:此实现不是同步的。如果多个线程同时访问 ArrayList 实例,并且至少有一个线程结构性地修改了列表,则必须在外部进行同步。(结构修改是添加或删除一个或多个元素,或显式调整后备数组大小的任何操作;仅仅设置元素的值不是结构修改。)这通常通过在自然封装列表的对象上进行同步来实现。
如果不存在这样的对象,则应该使用 Collections.synchronizedList 方法"包装"列表。最好在创建时完成此操作,以防止对列表的意外不同步访问:
List list = Collections.synchronizedList(new ArrayList(...));
此类的 iterator 和 listIterator 方法返回的迭代器是快速失败的:如果在迭代器创建后的任何时间对列表进行结构修改,除非通过迭代器自己的 remove 或 add 方法,否则迭代器将抛出 ConcurrentModificationException。因此,在面对并发修改时,迭代器会快速而干净地失败,而不是在未来不确定的时间冒任意、不确定行为的风险。
注意,迭代器的快速失败行为无法得到保证,因为一般来说,在存在不同步的并发修改时,不可能做出任何硬性保证。快速失败的迭代器会尽最大努力抛出 ConcurrentModificationException。因此,编写依赖于此异常来确保正确性的程序是错误的:迭代器的快速失败行为应仅用于检测 bug。
此类是 Java 集合框架的成员。
类
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable {}
上一页
String.java
下一页
Iterable.java
Built with