public class CopyOnWriteArrayList
extends Object
implements List<E>, RandomAccess, Cloneable, Serializable
java.lang.Object | |
↳ | java.util.concurrent.CopyOnWriteArrayList<E> |
线程安全的随机访问列表。
读操作(包括get(int)
)不会被阻塞,并可能与更新操作重叠。 读数反映了最近完成的操作的结果。 像addAll(int, Collection
)
和clear()
这样的聚合操作是原子的; 他们从不暴露中间状态。
这个列表的迭代器永远不会抛出ConcurrentModificationException
。 当创建一个迭代器时,它会保留列表内容的副本。 迭代这个列表总是安全的,但迭代可能不会反映列表的最新状态。
此列表及其子列表返回的迭代器不能修改基础列表。 特别是remove()
, add(E)
和set(E)
都会抛出UnsupportedOperationException
。
该类提供超出List
接口的扩展API。 它包括用于索引搜索的额外重载( indexOf(E, int)
和lastIndexOf(E, int)
)以及用于条件添加的方法( addIfAbsent(E)
和addAllAbsent(Collection
)
)。
Public constructors |
|
---|---|
CopyOnWriteArrayList() 创建一个新的空实例。 |
|
CopyOnWriteArrayList(Collection<? extends E> collection) 创建一个包含 |
|
CopyOnWriteArrayList(E[] array) 创建一个包含 |
Public methods |
|
---|---|
boolean |
add(E e) 将指定的元素附加到此列表的末尾(可选操作)。 |
void |
add(int index, E e) 将指定元素插入此列表中的指定位置(可选操作)。 |
boolean |
addAll(Collection<? extends E> collection) 按指定集合的迭代器(可选操作)返回的顺序,将指定集合中的所有元素追加到此列表的末尾。 |
boolean |
addAll(int index, Collection<? extends E> collection) 将指定集合中的所有元素插入指定位置的此列表中(可选操作)。 |
int |
addAllAbsent(Collection<? extends E> collection) 添加尚未出现在此列表中的元素 |
boolean |
addIfAbsent(E object) 如果该列表尚未出现,请将 |
void |
clear() 从此列表中删除所有元素(可选操作)。 |
Object |
clone() 创建并返回此对象的副本。 |
boolean |
contains(Object o) 如果此列表包含指定的元素,则返回 true 。 |
boolean |
containsAll(Collection<?> collection) 如果此列表包含指定集合的所有元素,则返回 true 。 |
boolean |
equals(Object other) 指示其他某个对象是否“等于”这一个。 |
void |
forEach(Consumer<? super E> action) |
E |
get(int index) 返回此列表中指定位置的元素。 |
int |
hashCode() 返回对象的哈希码值。 |
int |
indexOf(E object, int from) 在此列表中搜索 |
int |
indexOf(Object object) 返回此列表中指定元素第一次出现的索引,如果此列表不包含元素,则返回-1。 |
boolean |
isEmpty() 如果此列表不包含任何元素,则返回 true 。 |
Iterator<E> |
iterator() 返回一个 |
int |
lastIndexOf(Object object) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。 |
int |
lastIndexOf(E object, int to) 搜索此列表 |
ListIterator<E> |
listIterator(int index) 返回一个 |
ListIterator<E> |
listIterator() 相当于 |
E |
remove(int index) 删除此列表中指定位置的元素(可选操作)。 |
boolean |
remove(Object o) 从列表中删除第一次出现的指定元素(如果存在)(可选操作)。 |
boolean |
removeAll(Collection<?> collection) 从此列表中删除指定集合中包含的所有元素(可选操作)。 |
void |
replaceAll(UnaryOperator<E> operator) 用将运算符应用于该元素的结果替换此列表中的每个元素。 |
boolean |
retainAll(Collection<?> collection) 仅保留指定集合中包含的此列表中的元素(可选操作)。 |
E |
set(int index, E e) 用指定的元素替换此列表中指定位置的元素(可选操作)。 |
int |
size() 返回此列表中元素的数量。 |
void |
sort(Comparator<? super E> c) 使用提供的 |
List<E> |
subList(int from, int to) 返回指定的 fromIndex (含)和 toIndex之间的此列表部分的视图,排他。 |
Object[] |
toArray() 以适当的顺序返回一个包含此列表中所有元素的数组(从第一个元素到最后一个元素)。 |
<T> T[] |
toArray(T[] contents) 以正确的顺序返回一个包含此列表中所有元素的数组(从第一个元素到最后一个元素); 返回数组的运行时类型是指定数组的运行时类型。 |
String |
toString() 返回对象的字符串表示形式。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
|
From interface java.util.List
|
|
From interface java.util.Collection
|
|
From interface java.lang.Iterable
|
CopyOnWriteArrayList (Collection<? extends E> collection)
创建一个包含 collection
元素的新实例。
Parameters | |
---|---|
collection |
Collection
|
CopyOnWriteArrayList (E[] array)
创建一个包含 array
元素的新实例。
Parameters | |
---|---|
array |
E
|
boolean add (E e)
将指定的元素附加到此列表的末尾(可选操作)。
支持此操作的列表可能会限制可以将哪些元素添加到此列表中。 特别是,一些列表将拒绝添加空元素,而其他列表将对可能添加的元素的类型施加限制。 列表类应在其文档中明确指定可添加元素的任何限制。
Parameters | |
---|---|
e |
E : element to be appended to this list |
Returns | |
---|---|
boolean |
true (as specified by add(E) ) |
void add (int index, E e)
将指定元素插入此列表中的指定位置(可选操作)。 将当前位置的元素(如果有的话)和任何后续元素移到右侧(将其中的一个添加到它们的索引)。
Parameters | |
---|---|
index |
int : index at which the specified element is to be inserted |
e |
E : element to be inserted |
boolean addAll (Collection<? extends E> collection)
按指定集合的迭代器(可选操作)返回的顺序,将指定集合中的所有元素追加到此列表的末尾。 如果在操作过程中修改了指定的集合,则此操作的行为未定义。 (请注意,如果指定的集合是这个列表,并且它是非空的,则会发生这种情况。)
Parameters | |
---|---|
collection |
Collection : collection containing elements to be added to this list |
Returns | |
---|---|
boolean |
true if this list changed as a result of the call |
boolean addAll (int index, Collection<? extends E> collection)
将指定集合中的所有元素插入指定位置的此列表中(可选操作)。 将当前在该位置的元素(如果有的话)和随后的元素移到右侧(增加它们的索引)。 新元素将按照它们由指定集合的迭代器返回的顺序出现在此列表中。 如果在操作过程中修改了指定的集合,则此操作的行为未定义。 (请注意,如果指定的集合是这个列表,并且它是非空的,则会发生这种情况。)
Parameters | |
---|---|
index |
int : index at which to insert the first element from the specified collection |
collection |
Collection : collection containing elements to be added to this list |
Returns | |
---|---|
boolean |
true if this list changed as a result of the call |
int addAllAbsent (Collection<? extends E> collection)
添加collection
中尚不存在于此列表中的元素。 如果collection
包含重复值,则该值最多会出现一次。 元素添加在此列表的末尾。
此方法的调用者可能更喜欢 CopyOnWriteArraySet
,其API更适合于集合操作。
Parameters | |
---|---|
collection |
Collection
|
Returns | |
---|---|
int |
boolean addIfAbsent (E object)
如果该列表尚未出现,请将 object
添加到此列表的末尾。
此方法的调用者可能更喜欢 CopyOnWriteArraySet
,其API更适合于设置操作。
Parameters | |
---|---|
object |
E
|
Returns | |
---|---|
boolean |
Object clone ()
创建并返回此对象的副本。 “复制”的确切含义可能取决于对象的类别。 一般意图是,对于任何对象x
,表达式:
will be true, and that the expression:x.clone() != x
will bex.clone().getClass() == x.getClass()
true
, but these are not absolute requirements. While it is typically the case that:
will bex.clone().equals(x)
true
, this is not an absolute requirement.
按照惯例,返回的对象应该通过调用super.clone
获得。 如果一个类和它的所有超类( Object
除外)都遵守这个约定,那么情况就是x.clone().getClass() == x.getClass()
。
按照惯例,这个方法返回的对象应该独立于这个对象(被克隆)。 为了实现这种独立性,可能需要在返回super.clone
之前修改对象的一个或多个字段。 通常,这意味着复制包含被克隆对象的内部“深层结构”的任何可变对象,并将这些对象的引用替换为对这些副本的引用。 如果一个类只包含原始字段或对不可变对象的引用,那么通常情况下不需要修改super.clone
返回的对象中的任何字段。
类Object
的方法clone
执行特定的克隆操作。 首先,如果该对象的类没有实现接口Cloneable
,则引发CloneNotSupportedException
。 请注意,所有数组都被视为实现接口Cloneable
并且数组类型T[]
的clone
方法的返回类型为T[]
,其中T是任何引用或基本类型。 否则,此方法创建该对象的类的新实例,并使用该对象的相应字段的内容来初始化其所有字段,就像通过赋值一样; 这些字段的内容本身并不克隆。 因此,此方法执行此对象的“浅拷贝”,而不是“深拷贝”操作。
类 Object
本身并不实现接口 Cloneable
,所以在类 Object
的对象上调用 clone
方法将导致在运行时抛出异常。
Returns | |
---|---|
Object |
a clone of this instance. |
boolean contains (Object o)
如果此列表包含指定的元素,则返回true 。 更正式地,返回true当且仅当该列表包含至少一个元素e,例如(o==null ? e==null : o.equals(e)) 。
Parameters | |
---|---|
o |
Object : element whose presence in this list is to be tested |
Returns | |
---|---|
boolean |
true if this list contains the specified element |
boolean containsAll (Collection<?> collection)
如果此列表包含指定集合的所有元素,则返回 true 。
Parameters | |
---|---|
collection |
Collection : collection to be checked for containment in this list |
Returns | |
---|---|
boolean |
true if this list contains all of the elements of the specified collection |
boolean equals (Object other)
指示其他某个对象是否“等于”这一个。
equals
方法在非空对象引用上实现等价关系:
x
, x.equals(x)
should return true
. x
and y
, x.equals(y)
should return true
if and only if y.equals(x)
returns true
. x
, y
, and z
, if x.equals(y)
returns true
and y.equals(z)
returns true
, then x.equals(z)
should return true
. x
and y
, multiple invocations of x.equals(y)
consistently return true
or consistently return false
, provided no information used in equals
comparisons on the objects is modified. x
, x.equals(null)
should return false
. 类Object
的equals
方法实现了对象上最可能的等价关系; 也就是说,对于任何非空参考值x
和y
,当且仅当x
和y
引用同一对象( x == y
的值为true
)时,此方法返回true
。
请注意,无论何时重写此方法,通常都需要重写 hashCode
方法,以维护 hashCode
方法的一般合同,该方法声明等同对象必须具有相同的哈希码。
Parameters | |
---|---|
other |
Object : the reference object with which to compare. |
Returns | |
---|---|
boolean |
true if this object is the same as the obj argument; false otherwise. |
E get (int index)
返回此列表中指定位置的元素。
Parameters | |
---|---|
index |
int : index of the element to return |
Returns | |
---|---|
E |
the element at the specified position in this list |
int hashCode ()
返回对象的哈希码值。 为了散列表的好处而支持该方法,例如由HashMap
提供的HashMap
。
hashCode
的总合同是:
hashCode
method must consistently return the same integer, provided no information used in equals
comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application. equals(Object)
method, then calling the hashCode
method on each of the two objects must produce the same integer result. equals(java.lang.Object)
method, then calling the hashCode
method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables. 尽可能合理实用,类Object
定义的hashCode方法确实为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但Java TM编程语言不需要此实现技术。)
Returns | |
---|---|
int |
a hash code value for this object. |
int indexOf (E object, int from)
在此列表中搜索 object
并返回 from
或之后的第一个匹配项的索引。
Parameters | |
---|---|
object |
E
|
from |
int
|
Returns | |
---|---|
int |
the index or -1 if the object was not found. |
int indexOf (Object object)
返回此列表中指定元素第一次出现的索引,如果此列表不包含元素,则返回-1。 更正式地说,返回最低索引i,例如(o==null ? get(i)==null : o.equals(get(i))) ,如果没有这样的索引,则返回-1。
Parameters | |
---|---|
object |
Object : element to search for |
Returns | |
---|---|
int |
the index of the first occurrence of the specified element in this list, or -1 if this list does not contain the element |
boolean isEmpty ()
如果此列表不包含任何元素,则返回 true 。
Returns | |
---|---|
boolean |
true if this list contains no elements |
Iterator<E> iterator ()
返回一个Iterator
,它在此方法调用时迭代此列表的元素。 此方法调用后所做的列表更改将不会被迭代器反映,也不会触发ConcurrentModificationException
。
返回的迭代器不支持 remove()
。
Returns | |
---|---|
Iterator<E> |
an iterator over the elements in this list in proper sequence |
int lastIndexOf (Object object)
返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。 更正式地说,返回最高索引i,例如(o==null ? get(i)==null : o.equals(get(i))) ,如果没有这样的索引,则返回-1。
Parameters | |
---|---|
object |
Object : element to search for |
Returns | |
---|---|
int |
the index of the last occurrence of the specified element in this list, or -1 if this list does not contain the element |
int lastIndexOf (E object, int to)
搜索此列表 object
并返回最后一次出现是之前的指数 to
。
Parameters | |
---|---|
object |
E
|
to |
int
|
Returns | |
---|---|
int |
the index or -1 if the object was not found. |
ListIterator<E> listIterator (int index)
返回一个ListIterator
,它反复遍历此列表的元素,就像它们在此方法调用时一样。 此方法调用后所做的列表更改不会被迭代器反映,也不会触发ConcurrentModificationException
。
返回的迭代器不支持 add(E)
, set(E)
或者 remove()
,
Parameters | |
---|---|
index |
int : index of the first element to be returned from the list iterator (by a call to next ) |
Returns | |
---|---|
ListIterator<E> |
a list iterator over the elements in this list (in proper sequence), starting at the specified position in the list |
ListIterator<E> listIterator ()
相当于 listIterator(0)
。
Returns | |
---|---|
ListIterator<E> |
a list iterator over the elements in this list (in proper sequence) |
E remove (int index)
删除此列表中指定位置的元素(可选操作)。 将任何随后的元素向左移(从其索引中减去一个元素)。 返回从列表中移除的元素。
Parameters | |
---|---|
index |
int : the index of the element to be removed |
Returns | |
---|---|
E |
the element previously at the specified position |
boolean remove (Object o)
从列表中删除第一次出现的指定元素(如果存在)(可选操作)。 如果该列表不包含该元素,则不变。 更正式地说,删除索引最低的元素i ,使得(o==null ? get(i)==null : o.equals(get(i))) (如果存在这样的元素)。 如果此列表包含指定的元素(或者等价地,如果此列表因呼叫而改变),则返回true 。
Parameters | |
---|---|
o |
Object : element to be removed from this list, if present |
Returns | |
---|---|
boolean |
true if this list contained the specified element |
boolean removeAll (Collection<?> collection)
从此列表中删除指定集合中包含的所有元素(可选操作)。
Parameters | |
---|---|
collection |
Collection : collection containing elements to be removed from this list |
Returns | |
---|---|
boolean |
true if this list changed as a result of the call |
void replaceAll (UnaryOperator<E> operator)
用将运算符应用于该元素的结果替换此列表中的每个元素。 由操作员抛出的错误或运行时异常会传递给调用者。
Parameters | |
---|---|
operator |
UnaryOperator : the operator to apply to each element |
boolean retainAll (Collection<?> collection)
仅保留指定集合中包含的此列表中的元素(可选操作)。 换句话说,从该列表中删除所有未包含在指定集合中的元素。
Parameters | |
---|---|
collection |
Collection : collection containing elements to be retained in this list |
Returns | |
---|---|
boolean |
true if this list changed as a result of the call |
E set (int index, E e)
用指定的元素替换此列表中指定位置的元素(可选操作)。
Parameters | |
---|---|
index |
int : index of the element to replace |
e |
E : element to be stored at the specified position |
Returns | |
---|---|
E |
the element previously at the specified position |
int size ()
返回此列表中元素的数量。 如果此列表包含多个Integer.MAX_VALUE元素,则返回Integer.MAX_VALUE 。
Returns | |
---|---|
int |
the number of elements in this list |
void sort (Comparator<? super E> c)
使用提供的 Comparator
对此列表进行排序以比较元素。
Parameters | |
---|---|
c |
Comparator : the Comparator used to compare list elements. A null value indicates that the elements' natural ordering should be used |
List<E> subList (int from, int to)
返回指定的fromIndex (含)和toIndex之间的此列表部分的视图,不包括。 (如果fromIndex和toIndex相等,则返回的列表为空。)返回的列表由此列表支持,因此返回列表中的非结构更改会反映在此列表中,反之亦然。 返回的列表支持此列表支持的所有可选列表操作。
此方法消除了对显式范围操作(数组通常存在的那种操作)的需要。 任何需要列表的操作都可以通过传递子列表视图而不是整个列表来用作范围操作。 例如,下面的习语从列表中删除了一系列元素:
list.subList(from, to).clear();Similar idioms may be constructed for indexOf and lastIndexOf, and all of the algorithms in the Collections class can be applied to a subList.
如果支持列表(即此列表)在结构上以非返回列表的方式进行了修改 ,则此方法返回的列表的语义变得未定义。 (结构修改是那些改变这个列表的大小,或者以这样一种方式干扰它,以致正在进行的迭代可能产生不正确的结果。)
Parameters | |
---|---|
from |
int : low endpoint (inclusive) of the subList |
to |
int : high endpoint (exclusive) of the subList |
Returns | |
---|---|
List<E> |
a view of the specified range within this list |
Object[] toArray ()
以适当的顺序返回一个包含此列表中所有元素的数组(从第一个元素到最后一个元素)。
返回的数组将是“安全的”,因为此列表不会保留对它的引用。 (换句话说,即使列表由数组支持,该方法也必须分配一个新数组)。 调用者可以自由修改返回的数组。
此方法充当基于数组和基于集合的API之间的桥梁。
Returns | |
---|---|
Object[] |
an array containing all of the elements in this list in proper sequence |
T[] toArray (T[] contents)
以正确的顺序返回一个包含此列表中所有元素的数组(从第一个元素到最后一个元素); 返回数组的运行时类型是指定数组的运行时类型。 如果列表符合指定的数组,则返回其中。 否则,将使用指定数组的运行时类型和此列表的大小分配一个新数组。
如果列表符合指定的数组并且有空余空间(即数组的元素多于列表),紧接列表结尾的数组中的元素被设置为null 。 ( 仅当调用者知道列表不包含任何空元素时,这对确定列表的长度很有用。)
与toArray()
方法一样,此方法充当基于阵列和基于集合的API之间的桥梁。 此外,该方法允许精确控制输出数组的运行时类型,并且在某些情况下可以用于节省分配成本。
假设x是已知仅包含字符串的列表。 以下代码可用于将列表转储到新分配的String数组中:
String[] y = x.toArray(new String[0]);Note that toArray(new Object[0]) is identical in function to toArray().
Parameters | |
---|---|
contents |
T : the array into which the elements of this list are to be stored, if it is big enough; otherwise, a new array of the same runtime type is allocated for this purpose. |
Returns | |
---|---|
T[] |
an array containing the elements of this list |
String toString ()
返回对象的字符串表示形式。 一般来说, toString
方法返回一个“文本表示”该对象的字符串。 结果应该是一个简洁但内容丰富的表述,对于一个人来说很容易阅读。 建议所有子类重写此方法。
类Object
的toString
方法返回一个字符串,其中包含对象为实例的类的名称,符号字符“ @
”以及对象的哈希代码的无符号十六进制表示形式。 换句话说,这个方法返回一个字符串,其值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
Returns | |
---|---|
String |
a string representation of the object. |