public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable
该size,isEmpty,get,set,iterator和listIterator操作在固定时间内运行。 add操作以摊余常数运行 ,即添加n个元素需要O(n)个时间。 所有其他操作都以线性时间运行(粗略地说)。 与LinkedList实施相比,常数因子较低。
每个ArrayList实例都有一个容量 。 容量是用于存储列表中的元素的数组的大小。 它总是至少与列表大小一样大。 当元素添加到ArrayList时,其容量会自动增长。 没有规定增长政策的细节,除了添加元素具有不变的摊销时间成本。
应用程序可以添加大量使用ensureCapacity操作元件的前增大ArrayList实例的容量。 这可能会减少增量重新分配的数量。
请注意,此实现不同步。 如果多个线程同时访问884457282749实例,并且至少有一个线程在结构上修改列表,则必须在外部进行同步。 (结构修改是添加或删除一个或多个元素的任何操作,或明确调整后台数组的大小;仅设置元素的值不是结构修改。)这通常是通过在一些自然地封装了列表。 如果没有这样的对象存在,列表应该使用Collections.synchronizedList
方法“包装”。 这最好在创建时完成,以防止意外的不同步访问列表:
List list = Collections.synchronizedList(new ArrayList(...));
The iterators returned by this class's个 iterator
和listIterator
方法是快速失败的 :如果列表在任何时间从结构上修改创建迭代器之后,以任何方式除非通过迭代器自身remove
种或add
方法,迭代器都将抛出一个ConcurrentModificationException
。 因此,面对并发修改,迭代器将快速而干净地失败,而不是在未来未确定的时间冒着任意的非确定性行为。
请注意,迭代器的故障快速行为无法保证,因为一般来说,在不同步并发修改的情况下,无法做出任何硬性保证。 失败快速迭代器尽力投入ConcurrentModificationException
。 因此,编写依赖于此异常的程序的正确性将是错误的:迭代器的故障快速行为应仅用于检测错误。
Collection
, List
, LinkedList
, Vector
, Serialized Form
modCount
Constructor and Description |
---|
ArrayList()
构造一个初始容量为十的空列表。
|
ArrayList(Collection<? extends E> c)
构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。
|
ArrayList(int initialCapacity)
构造具有指定初始容量的空列表。
|
Modifier and Type | Method and Description |
---|---|
boolean |
add(E e)
将指定的元素追加到此列表的末尾。
|
void |
add(int index, E element)
在此列表中的指定位置插入指定的元素。
|
boolean |
addAll(Collection<? extends E> c)
按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表的末尾。
|
boolean |
addAll(int index, Collection<? extends E> c)
将指定集合中的所有元素插入到此列表中,从指定的位置开始。
|
void |
clear()
从列表中删除所有元素。
|
Object |
clone()
返回此
ArrayList实例的浅拷贝。
|
boolean |
contains(Object o)
如果此列表包含指定的元素,则返回
true 。
|
void |
ensureCapacity(int minCapacity)
如果需要,增加此
ArrayList实例的容量,以确保它可以至少保存最小容量参数指定的元素数。
|
void |
forEach(Consumer<? super E> action)
对
Iterable 的每个元素执行给定的操作,直到所有元素都被处理或动作引发异常。
|
E |
get(int index)
返回此列表中指定位置的元素。
|
int |
indexOf(Object o)
返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。
|
boolean |
isEmpty()
如果此列表不包含元素,则返回
true 。
|
Iterator<E> |
iterator()
以正确的顺序返回该列表中的元素的迭代器。
|
int |
lastIndexOf(Object o)
返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。
|
ListIterator<E> |
listIterator()
返回列表中的列表迭代器(按适当的顺序)。
|
ListIterator<E> |
listIterator(int index)
从列表中的指定位置开始,返回列表中的元素(按正确顺序)的列表迭代器。
|
E |
remove(int index)
删除该列表中指定位置的元素。
|
boolean |
remove(Object o)
从列表中删除指定元素的第一个出现(如果存在)。
|
boolean |
removeAll(Collection<?> c)
从此列表中删除指定集合中包含的所有元素。
|
boolean |
removeIf(Predicate<? super E> filter)
删除满足给定谓词的此集合的所有元素。
|
protected void |
removeRange(int fromIndex, int toIndex)
从这个列表中删除所有索引在
fromIndex (含)和
toIndex 之间的元素。
|
void |
replaceAll(UnaryOperator<E> operator)
将该列表的每个元素替换为将该运算符应用于该元素的结果。
|
boolean |
retainAll(Collection<?> c)
仅保留此列表中包含在指定集合中的元素。
|
E |
set(int index, E element)
用指定的元素替换此列表中指定位置的元素。
|
int |
size()
返回此列表中的元素数。
|
void |
sort(Comparator<? super E> c)
使用提供的
Comparator 对此列表进行排序以比较元素。
|
Spliterator<E> |
spliterator()
在此列表中的元素上创建late-binding和故障快速 Spliterator 。
|
List<E> |
subList(int fromIndex, int toIndex)
返回此列表中指定的
fromIndex (包括)和
toIndex 之间的独占视图。
|
Object[] |
toArray()
以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组。
|
<T> T[] |
toArray(T[] a)
以正确的顺序返回一个包含此列表中所有元素的数组(从第一个到最后一个元素);
返回的数组的运行时类型是指定数组的运行时类型。
|
void |
trimToSize()
修改这个
ArrayList实例的容量是列表的当前大小。
|
equals, hashCode
containsAll, toString
finalize, getClass, notify, notifyAll, wait, wait, wait
containsAll, equals, hashCode
parallelStream, stream
public ArrayList(int initialCapacity)
initialCapacity
- 列表的初始容量
IllegalArgumentException
- 如果指定的初始容量为负
public ArrayList()
public ArrayList(Collection<? extends E> c)
c
- 要将元素放入此列表的集合
NullPointerException
- 如果指定的集合为空
public void trimToSize()
public void ensureCapacity(int minCapacity)
minCapacity
- 所需的最小容量
public int size()
size
在接口
Collection<E>
size
在接口
List<E>
size
在
AbstractCollection<E>
public boolean isEmpty()
isEmpty
在接口
Collection<E>
isEmpty
中的
List<E>
isEmpty
在
AbstractCollection<E>
public boolean contains(Object o)
contains
在接口
Collection<E>
contains
在接口
List<E>
contains
在
AbstractCollection<E>
o
- 要在此列表中存在的元素要测试的元素
public int indexOf(Object o)
public int lastIndexOf(Object o)
lastIndexOf
在接口
List<E>
lastIndexOf
在
AbstractList<E>
o
- 要搜索的元素
public Object clone()
public Object[] toArray()
返回的数组将是“安全的”,因为该列表不保留对它的引用。 (换句话说,这个方法必须分配一个新的数组)。 因此,调用者可以自由地修改返回的数组。
此方法充当基于阵列和基于集合的API之间的桥梁。
toArray
在接口
Collection<E>
toArray
在界面
List<E>
toArray
在
AbstractCollection<E>
Arrays.asList(Object[])
public <T> T[] toArray(T[] a)
如果列表适用于指定的数组,其余空间(即数组的列表数量多于此元素),则紧跟在集合结束后的数组中的元素设置为null 。 (这仅在调用者知道列表不包含任何空元素的情况下才能确定列表的长度。)
toArray
在接口
Collection<E>
toArray
在接口
List<E>
toArray
在
AbstractCollection<E>
T
- 包含集合的数组的运行时类型
a
- 要存储列表的元素的数组,如果它够大;
否则,为此目的分配相同运行时类型的新数组。
ArrayStoreException
- 如果指定数组的运行时类型不是此列表中每个元素的运行时类型的超类型
NullPointerException
- 如果指定的数组为空
public E get(int index)
get
中的
List<E>
get
在
AbstractList<E>
index
- 要返回的元素的索引
IndexOutOfBoundsException
- 如果索引超出范围(
index < 0 || index >= size() )
public E set(int index, E element)
set
在界面
List<E>
set
在
AbstractList<E>
index
- 要替换的元素的索引
element
- 要存储在指定位置的元素
IndexOutOfBoundsException
- 如果指数超出范围(
index < 0 || index >= size() )
public boolean add(E e)
add
在界面
Collection<E>
add
在界面
List<E>
add
在
AbstractList<E>
e
- 要附加到此列表的元素
Collection.add(E)
指定 )
public void add(int index, E element)
add
在接口
List<E>
add
在
AbstractList<E>
index
- 要插入指定元素的索引
element
- 要插入的元素
IndexOutOfBoundsException
- 如果索引超出范围(
index < 0 || index > size() )
public E remove(int index)
remove
在界面
List<E>
remove
在
AbstractList<E>
index
- 要删除的元素的索引
IndexOutOfBoundsException
- 如果指数超出范围(
index < 0 || index >= size() )
public boolean remove(Object o)
remove
在接口
Collection<E>
remove
在接口
List<E>
remove
在
AbstractCollection<E>
o
- 要从此列表中删除的元素(如果存在)
public void clear()
clear
在接口
Collection<E>
clear
中的
List<E>
clear
在
AbstractList<E>
public boolean addAll(Collection<? extends E> c)
addAll
在界面
Collection<E>
addAll
在接口
List<E>
addAll
在类
AbstractCollection<E>
c
- 包含要添加到此列表的元素的集合
NullPointerException
- 如果指定的集合为空
AbstractCollection.add(Object)
public boolean addAll(int index, Collection<? extends E> c)
addAll
中的
List<E>
addAll
在
AbstractList<E>
index
- 从中指定集合插入第一个元素的索引
c
- 包含要添加到此列表的元素的集合
IndexOutOfBoundsException
- 如果指数超出范围(
index < 0 || index > size() )
NullPointerException
- 如果指定的集合为空
protected void removeRange(int fromIndex, int toIndex)
fromIndex
(含)和toIndex
之间的元素。
将任何后续元素移动到左侧(减少其索引)。
此通话由(toIndex - fromIndex)
元素缩短列表。
(如果是toIndex==fromIndex
,这个操作没有效果)
removeRange
在
AbstractList<E>
fromIndex
- 要删除的第一个元素的索引
toIndex
- 要删除的最后一个元素后的索引
IndexOutOfBoundsException
- 如果
fromIndex
或
toIndex
超出范围(
fromIndex < 0 || fromIndex >= size() || toIndex > size() || toIndex < fromIndex
)
public boolean removeAll(Collection<?> c)
removeAll
在界面
Collection<E>
removeAll
在接口
List<E>
removeAll
在
AbstractCollection<E>
c
- 包含要从此列表中删除的元素的集合
true
如果此列表因呼叫而更改
ClassCastException
- 如果此列表的元素的类与指定的集合不兼容(
optional )
NullPointerException
- 如果此列表包含空元素,并且指定的集合不允许空元素(
optional ),或者如果指定的集合为空
Collection.contains(Object)
public boolean retainAll(Collection<?> c)
retainAll
在接口
Collection<E>
retainAll
在界面
List<E>
retainAll
在
AbstractCollection<E>
c
- 包含要保留在此列表中的元素的集合
true
如果此列表因呼叫而更改
ClassCastException
- 如果此列表的元素的类与指定的集合不兼容(
optional )
NullPointerException
- 如果此列表包含空元素,并且指定的集合不允许空元素(
optional ),或者如果指定的集合为空
Collection.contains(Object)
public ListIterator<E> listIterator(int index)
next
。
初始调用previous
将返回指定索引减1的元素。
返回的列表迭代器是fail-fast 。
listIterator
在接口
List<E>
listIterator
在
AbstractList<E>
index
- 要从列表迭代器返回的第一个元素的索引(通过调用
next
)
IndexOutOfBoundsException
- 如果索引超出范围(
index < 0 || index > size()
)
public ListIterator<E> listIterator()
返回的列表迭代器是fail-fast 。
listIterator
中的
List<E>
listIterator
在
AbstractList<E>
listIterator(int)
public List<E> subList(int fromIndex, int toIndex)
fromIndex
(含)和toIndex
之间的列表部分的视图。
(如果fromIndex
和toIndex
相等,返回的列表为空。)返回的列表由此列表支持,因此返回列表中的非结构性更改将反映在此列表中,反之亦然。
返回的列表支持所有可选列表操作。
该方法消除了对显式范围操作(对于数组通常存在的排序)的需要。 任何期望列表的操作都可以通过传递一个子列表视图而不是整个列表来用作范围操作。 例如,以下成语从列表中移除了一系列元素:
list.subList(from, to).clear();
可以为indexOf(Object)
和lastIndexOf(Object)
构造类似的成语,并且Collections
类中的所有算法都可以应用于子列表 。
如果支持列表(即,此列表)以除了通过返回的列表之外的任何方式进行结构修改 ,则此方法返回的列表的语义将变得未定义。 (结构修改是那些改变此列表的大小,或以其他方式扰乱它,使得正在进行的迭代可能产生不正确的结果)。
subList
在接口
List<E>
subList
在
AbstractList<E>
fromIndex
-
fromIndex
低端点(含)
toIndex
-
toIndex
高端点(独占)
IndexOutOfBoundsException
- 如果端点索引值超出范围
(fromIndex < 0 || toIndex > size)
IllegalArgumentException
- 如果端点索引是乱序
(fromIndex > toIndex)
public void forEach(Consumer<? super E> action)
Iterable
复制
Iterable
的每个元素执行给定的操作,直到所有元素都被处理或动作引发异常。
除非实现类另有规定,否则按照迭代的顺序执行操作(如果指定了迭代顺序)。
动作抛出的异常被转发给呼叫者。
public Spliterator<E> spliterator()
Spliterator
。
该Spliterator
报告Spliterator.SIZED
, Spliterator.SUBSIZED
和Spliterator.ORDERED
。 覆盖实现应记录其他特征值的报告。
spliterator
在接口
Iterable<E>
spliterator
中的
Collection<E>
spliterator
在界面
List<E>
Spliterator
在这个列表中的元素
public boolean removeIf(Predicate<? super E> filter)
Collection
removeIf
在接口
Collection<E>
filter
- 一个谓词,为要删除的元素返回
true
true
如果有任何元素被删除
public void replaceAll(UnaryOperator<E> operator)
List
复制
replaceAll
在接口
List<E>
operator
- 操作员应用于每个元素
public void sort(Comparator<? super E> c)
List
Comparator
对此列表进行排序,以比较元素。
sort
在界面
List<E>
c
- 用于比较列表元素的Comparator
。
null
值表示应使用元素' natural ordering '