Module java.base

Class CopyOnWriteArrayList<E>

java.lang.Object
java.util.concurrent.CopyOnWriteArrayList<E>
类型参数:
E - 此列表中保存的元素的类型
所有实现的接口:
Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess, SequencedCollection<E>

public class CopyOnWriteArrayList<E> extends Object implements List<E>, RandomAccess, Cloneable, Serializable
ArrayList的线程安全变体,其中所有变动操作(addset等)通过制作基础数组的新副本来实现。

通常情况下,这是太昂贵的,但当遍历操作远远超过变动操作时,可能比其他替代方案更有效,并且在您无法或不想同步遍历但需要防止并发线程之间干扰时很有用。"快照"风格的迭代器方法使用对迭代器创建时数组状态的引用。此数组在迭代器的生命周期内永远不会更改,因此干扰是不可能的,并且保证迭代器不会抛出ConcurrentModificationException。迭代器不会反映自迭代器创建以来列表的添加、移除或更改。迭代器本身的元素更改操作(removesetadd)不受支持。这些方法会抛出UnsupportedOperationException

所有元素都是允许的,包括null

内存一致性效果: 与其他并发集合一样,在将对象放入CopyOnWriteArrayList之前的线程中的操作在另一个线程中访问或从CopyOnWriteArrayList中删除该元素之后发生之前。

此类是Java集合框架的成员。

自 JDK 版本:
1.5
另请参见:
  • Constructor Summary

    Constructors
    Constructor
    Description
    创建一个空列表。
    CopyOnWriteArrayList(E[] toCopyIn)
    创建一个包含给定数组副本的列表。
    创建一个包含指定集合元素的列表,按照集合迭代器返回的顺序。
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    add(int index, E element)
    在列表中指定位置插入指定元素。
    boolean
    add(E e)
    将指定元素追加到列表末尾。
    boolean
    addAll(int index, Collection<? extends E> c)
    从指定位置开始,将指定集合中的所有元素插入到列表中。
    boolean
    addAll(Collection<? extends E> c)
    将指定集合中的所有元素按照指定集合迭代器返回的顺序追加到列表末尾。
    int
    addAllAbsent(Collection<? extends E> c)
    将指定集合中尚未包含在此列表中的所有元素按照指定集合迭代器返回的顺序追加到列表末尾。
    void
    addFirst(E e)
    将元素作为此集合的第一个元素添加(可选操作)。
    boolean
    如果不存在,则追加元素。
    void
    addLast(E e)
    将元素作为此集合的最后一个元素添加(可选操作)。
    void
    clear()
    从列表中移除所有元素。
    clone()
    返回此列表的浅拷贝。
    boolean
    如果此列表包含指定元素,则返回true
    boolean
    如果此列表包含指定集合的所有元素,则返回true
    boolean
    将指定对象与此列表进行比较以测试相等性。
    void
    forEach(Consumer<? super E> action)
    Iterable的每个元素执行给定操作,直到所有元素都已处理或操作引发异常。
    E
    get(int index)
    返回列表中指定位置的元素。
    E
    获取此集合的第一个元素。
    E
    获取此集合的最后一个元素。
    int
    返回此列表的哈希码值。
    int
    indexOf(E e, int index)
    返回列表中从index开始向前搜索找到的指定元素的第一次出现的索引,如果未找到元素则返回-1。
    int
    返回列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。
    boolean
    如果此列表不包含任何元素,则返回true
    返回此列表中元素的迭代器,按正确顺序。
    int
    lastIndexOf(E e, int index)
    返回列表中从index开始向后搜索找到的指定元素的最后一次出现的索引,如果未找到元素则返回-1。
    int
    返回列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。
    返回此列表中元素的列表迭代器(按正确顺序)。
    listIterator(int index)
    返回此列表中元素的列表迭代器(按正确顺序),从列表中指定位置开始。
    E
    remove(int index)
    移除列表中指定位置的元素。
    boolean
    从列表中移除指定元素的第一次出现(如果存在)。
    boolean
    从列表中移除包含在指定集合中的所有元素。
    E
    移除并返回此集合的第一个元素(可选操作)。
    boolean
    removeIf(Predicate<? super E> filter)
    移除满足给定谓词的此集合的所有元素。
    E
    移除并返回此集合的最后一个元素(可选操作)。
    boolean
    仅保留此列表中包含在指定集合中的元素。
    List<E>
    返回此集合的逆序视图
    E
    set(int index, E element)
    用指定元素替换列表中指定位置的元素。
    int
    size()
    返回此列表中的元素数。
    返回此列表中元素的Spliterator
    List<E>
    subList(int fromIndex, int toIndex)
    返回列表中从fromIndex(包括)到toIndex(不包括)的部分的视图。
    Object[]
    返回包含此列表中所有元素的数组,按正确顺序(从第一个到最后一个元素)。
    <T> T[]
    toArray(T[] a)
    返回包含此列表中所有元素的数组,按正确顺序(从第一个到最后一个元素);返回数组的运行时类型与指定数组的类型相同。
    返回此列表的字符串表示形式。

    Methods declared in class java.lang.Object

    finalize, getClass, notify, notifyAll, wait, wait, wait

    Methods declared in interface java.util.Collection

    parallelStream, stream, toArray

    Methods declared in interface java.util.List

    replaceAll, sort
  • Constructor Details

    • CopyOnWriteArrayList

      public CopyOnWriteArrayList()
      创建一个空列表。
    • CopyOnWriteArrayList

      public CopyOnWriteArrayList(Collection<? extends E> c)
      创建一个包含指定集合元素的列表,按照集合迭代器返回的顺序。
      参数:
      c - 最初保存的元素的集合
      抛出:
      NullPointerException - 如果指定的集合为 null
    • CopyOnWriteArrayList

      public CopyOnWriteArrayList(E[] toCopyIn)
      创建一个包含给定数组副本的列表。
      参数:
      toCopyIn - 数组(使用此数组的副本作为内部数组)
      抛出:
      NullPointerException - 如果指定的数组为 null
  • Method Details

    • size

      public int size()
      返回此列表中的元素数。
      指定者:
      size 在接口 Collection<E>
      指定者:
      size 在接口 List<E>
      返回:
      此列表中的元素数
    • isEmpty

      public boolean isEmpty()
      如果此列表不包含任何元素,则返回true
      指定者:
      isEmpty 在接口 Collection<E>
      指定者:
      isEmpty 在接口 List<E>
      返回:
      如果此列表不包含任何元素,则返回true
    • contains

      public boolean contains(Object o)
      如果此列表包含指定元素,则返回true。更正式地说,如果此列表包含至少一个元素e,使得Objects.equals(o, e),则返回true
      指定者:
      contains 在接口 Collection<E>
      指定者:
      contains 在接口 List<E>
      参数:
      o - 要测试其在此列表中存在性的元素
      返回:
      如果此列表包含指定元素,则返回true
    • indexOf

      public int indexOf(Object o)
      返回此列表中指定元素的第一次出现的索引,如果此列表不包含该元素,则返回-1。更正式地说,返回最低索引i,使得Objects.equals(o, get(i)),如果没有这样的索引,则返回-1。
      指定者:
      indexOf 在接口 List<E>
      参数:
      o - 要搜索的元素
      返回:
      此列表中指定元素的第一次出现的索引,如果此列表不包含该元素,则返回-1
    • indexOf

      public int indexOf(E e, int index)
      返回此列表中指定元素的第一次出现的索引,从index开始向前搜索,如果未找到该元素,则返回-1。更正式地说,返回最低索引i,使得i >= index && Objects.equals(get(i), e),如果没有这样的索引,则返回-1。
      参数:
      e - 要搜索的元素
      index - 开始向前搜索的索引
      返回:
      此列表中指定元素的第一次出现的索引,位置为index或之后在列表中;如果未找到该元素,则返回-1
      抛出:
      IndexOutOfBoundsException - 如果指定的索引为负数
    • lastIndexOf

      public int lastIndexOf(Object o)
      返回此列表中指定元素的最后一次出现的索引,如果此列表不包含该元素,则返回-1。更正式地说,返回最高索引i,使得Objects.equals(o, get(i)),如果没有这样的索引,则返回-1。
      指定者:
      lastIndexOf 在接口 List<E>
      参数:
      o - 要搜索的元素
      返回:
      此列表中指定元素的最后一次出现的索引,如果此列表不包含该元素,则返回-1
    • lastIndexOf

      public int lastIndexOf(E e, int index)
      返回此列表中指定元素的最后一次出现的索引,从index开始向后搜索,如果未找到该元素,则返回-1。更正式地说,返回最高索引i,使得i <= index && Objects.equals(get(i), e),如果没有这样的索引,则返回-1。
      参数:
      e - 要搜索的元素
      index - 开始向后搜索的索引
      返回:
      此列表中小于或等于index位置的元素的最后一次出现的索引;如果未找到该元素,则返回-1。
      抛出:
      IndexOutOfBoundsException - 如果指定的索引大于或等于此列表的当前大小
    • clone

      public Object clone()
      返回此列表的浅拷贝。(元素本身不会被复制。)
      覆盖:
      clone 在类 Object
      返回:
      此列表的克隆
      参见:
    • toArray

      public Object[] toArray()
      返回一个包含此列表中所有元素的数组,按正确顺序排列(从第一个元素到最后一个元素)。

      返回的数组将是“安全”的,因为此列表不会保留对它的引用。(换句话说,此方法必须分配一个新数组)。因此,调用者可以自由修改返回的数组。

      此方法充当基于数组和基于集合的API之间的桥梁。

      指定者:
      toArray 在接口 Collection<E>
      指定者:
      toArray 在接口 List<E>
      返回:
      包含此列表中所有元素的数组
      参见:
    • toArray

      public <T> T[] toArray(T[] a)
      返回一个包含此列表中所有元素的数组,按正确顺序排列(从第一个元素到最后一个元素);返回数组的运行时类型是指定数组的类型。如果列表适合指定的数组,则将其返回。否则,将使用指定数组的运行时类型和此列表的大小分配一个新数组。

      如果此列表适合指定数组并有多余空间(即,数组的元素多于此列表),则数组中紧接列表末尾的元素设置为null。(如果调用者知道此列表不包含任何空元素,则此方法仅用于确定此列表的长度。)

      toArray()方法类似,此方法充当基于数组和基于集合的API之间的桥梁。此外,此方法允许精确控制输出数组的运行时类型,并且在某些情况下,可用于节省分配成本。

      假设x是一个已知仅包含字符串的列表。可以使用以下代码将列表转储到新分配的String数组中:

       String[] y = x.toArray(new String[0]);
      注意,toArray(new Object[0])在功能上与toArray()相同。
      指定者:
      toArray 在接口 Collection<E>
      指定者:
      toArray 在接口 List<E>
      类型参数:
      T - 包含集合的数组的组件类型
      参数:
      a - 要存储列表元素的数组,如果足够大;否则,将为此目的分配相同运行时类型的新数组。
      返回:
      包含此列表中所有元素的数组
      抛出:
      ArrayStoreException - 如果指定数组的运行时类型不是此列表中每个元素的运行时类型的超类型
      NullPointerException - 如果指定的数组为null
    • get

      public E get(int index)
      返回此列表中指定位置的元素。
      指定者:
      get 在接口 List<E>
      参数:
      index - 要返回的元素的索引
      返回:
      此列表中指定位置的元素
      抛出:
      IndexOutOfBoundsException - 如果索引超出范围(index < 0 || index >= size()
    • getFirst

      public E getFirst()
      获取此集合的第一个元素。
      指定者:
      getFirst 在接口 List<E>
      指定者:
      getFirst 在接口 SequencedCollection<E>
      返回:
      检索到的元素
      抛出:
      NoSuchElementException - 如果此集合为空
      自:
      21
    • getLast

      public E getLast()
      获取此集合的最后一个元素。
      指定者:
      getLast 在接口 List<E>
      指定者:
      getLast 在接口 SequencedCollection<E>
      返回:
      检索到的元素
      抛出:
      NoSuchElementException - 如果此集合为空
      自:
      21
    • set

      public E set(int index, E element)
      用指定元素替换此列表中指定位置的元素。
      指定由:
      set 在接口 List<E>
      参数:
      index - 要替换的元素的索引
      element - 要存储在指定位置的元素
      返回:
      先前在指定位置的元素
      抛出:
      IndexOutOfBoundsException - 如果索引超出范围 (index < 0 || index >= size())
    • add

      public boolean add(E e)
      将指定的元素追加到此列表的末尾。
      指定由:
      add 在接口 Collection<E>
      指定由:
      add 在接口 List<E>
      参数:
      e - 要追加到此列表的元素
      返回:
      true (如 Collection.add(E) 中指定的)
    • add

      public void add(int index, E element)
      在此列表中的指定位置插入指定的元素。将当前在该位置的元素(如果有)和任何后续元素向右移动(将它们的索引加一)。
      指定由:
      add 在接口 List<E>
      参数:
      index - 要插入指定元素的索引
      element - 要插入的元素
      抛出:
      IndexOutOfBoundsException - 如果索引超出范围 (index < 0 || index > size())
    • addFirst

      public void addFirst(E e)
      将一个元素作为此集合的第一个元素添加(可选操作)。此操作正常完成后,给定元素将成为此集合的成员,并且它将是遇到顺序中的第一个元素。
      指定由:
      addFirst 在接口 List<E>
      指定由:
      addFirst 在接口 SequencedCollection<E>
      参数:
      e - 要添加的元素
      自:
      21
    • addLast

      public void addLast(E e)
      将一个元素作为此集合的最后一个元素添加(可选操作)。此操作正常完成后,给定元素将成为此集合的成员,并且它将是遇到顺序中的最后一个元素。
      指定由:
      addLast 在接口 List<E>
      指定由:
      addLast 在接口 SequencedCollection<E>
      参数:
      e - 要添加的元素
      自:
      21
    • remove

      public E remove(int index)
      删除此列表中指定位置的元素。将任何后续元素向左移动(从它们的索引中减去一个)。返回从列表中删除的元素。
      指定由:
      remove 在接口 List<E>
      参数:
      index - 要移除的元素的索引
      返回:
      先前在指定位置的元素
      抛出:
      IndexOutOfBoundsException - 如果索引超出范围 (index < 0 || index >= size())
    • removeFirst

      public E removeFirst()
      移除并返回此集合的第一个元素(可选操作)。
      指定由:
      removeFirst 在接口 List<E>
      指定由:
      removeFirst 在接口 SequencedCollection<E>
      返回:
      被移除的元素
      抛出:
      NoSuchElementException - 如果此集合为空
      自:
      21
    • removeLast

      public E removeLast()
      移除并返回此集合的最后一个元素(可选操作)。
      指定由:
      removeLast 在接口 List<E>
      指定由:
      removeLast 在接口 SequencedCollection<E>
      返回:
      被移除的元素
      抛出:
      NoSuchElementException - 如果此集合为空
      自:
      21
    • remove

      public boolean remove(Object o)
      从此列表中删除指定元素的第一个出现(如果存在)。如果此列表不包含该元素,则不会更改。更正式地说,删除具有最低索引 i 的元素,使得 Objects.equals(o, get(i))(如果存在这样的元素)。如果此列表包含指定的元素,则返回 true(或者等效地,如果此列表由于调用而更改)。
      指定由:
      remove 在接口 Collection<E>
      指定由:
      remove 在接口 List<E>
      参数:
      o - 如果存在,则从此列表中删除的元素
      返回:
      true 如果此列表包含指定的元素
    • addIfAbsent

      public boolean addIfAbsent(E e)
      如果不存在,则追加元素。
      参数:
      e - 如果不存在,则要添加到此列表的元素
      返回:
      true 如果添加了元素
    • containsAll

      public boolean containsAll(Collection<?> c)
      如果此列表包含指定集合的所有元素,则返回 true
      指定由:
      containsAll 在接口 Collection<E>
      指定由:
      containsAll 在接口 List<E>
      参数:
      c - 要检查是否包含在此列表中的集合
      返回:
      true 如果此列表包含指定集合的所有元素
      抛出:
      NullPointerException - 如果指定的集合为null
      参见:
    • removeAll

      public boolean removeAll(Collection<?> c)
      从此列表中删除包含在指定集合中的所有元素。由于需要内部临时数组,因此此类中的此操作特别昂贵。
      指定由:
      removeAll 在接口 Collection<E>
      指定由:
      removeAll 在接口 List<E>
      参数:
      c - 包含要从此列表中移除的元素的集合
      返回:
      如果调用导致此列表发生更改,则返回true
      抛出:
      ClassCastException - 如果此列表的元素的类与指定集合不兼容(可选
      NullPointerException - 如果此列表包含空元素且指定集合不允许空元素(可选),或者指定集合为null
      参见:
    • retainAll

      public boolean retainAll(Collection<?> c)
      仅保留此列表中包含在指定集合中的元素。换句话说,从此列表中删除所有不包含在指定集合中的元素。
      指定由:
      retainAll 在接口 Collection<E>
      指定由:
      retainAll 在接口 List<E>
      参数:
      c - 包含要在此列表中保留的元素的集合
      返回:
      如果调用导致此列表发生更改,则返回true
      抛出:
      ClassCastException - 如果此列表的元素的类与指定集合不兼容(可选
      NullPointerException - 如果此列表包含空元素且指定集合不允许空元素(可选),或者指定集合为null
      参见:
    • addAllAbsent

      public int addAllAbsent(Collection<? extends E> c)
      将指定集合中尚未包含在此列表中的所有元素追加到此列表的末尾,顺序与指定集合的迭代器返回的顺序相同。
      参数:
      c - 包含要添加到此列表中的元素的集合
      返回:
      添加的元素数量
      抛出:
      NullPointerException - 如果指定的集合为null
      参见:
    • clear

      public void clear()
      从此列表中删除所有元素。此调用返回后,列表将为空。
      指定由:
      clear 在接口 Collection<E>
      指定由:
      clear 在接口 List<E>
    • addAll

      public boolean addAll(Collection<? extends E> c)
      将指定集合中的所有元素追加到此列表的末尾,顺序与指定集合的迭代器返回的顺序相同。
      指定由:
      addAll 在接口 Collection<E>
      指定由:
      addAll 在接口 List<E>
      参数:
      c - 包含要添加到此列表中的元素的集合
      返回:
      如果调用导致此列表发生更改,则返回true
      抛出:
      NullPointerException - 如果指定的集合为null
      参见:
    • addAll

      public boolean addAll(int index, Collection<? extends E> c)
      将指定集合中的所有元素插入到此列表中,从指定位置开始。将当前位于该位置的元素(如果有)和任何后续元素向右移动(增加它们的索引)。新元素将按照指定集合的迭代器返回的顺序出现在此列表中。
      指定由:
      addAll 在接口 List<E>
      参数:
      index - 要从指定集合中插入第一个元素的索引
      c - 包含要添加到此列表中的元素的集合
      返回:
      如果调用导致此列表发生更改,则返回true
      抛出:
      IndexOutOfBoundsException - 如果索引超出范围(index < 0 || index > size()
      NullPointerException - 如果指定的集合为null
      参见:
    • forEach

      public void forEach(Consumer<? super E> action)
      从接口中复制的描述: Iterable
      Iterable的每个元素执行给定操作,直到所有元素都已处理或操作引发异常为止。如果指定了顺序,则按迭代顺序执行操作。操作引发的异常将传递给调用者。

      如果操作执行会修改元素的底层来源并产生副作用,则此方法的行为是未指定的,除非覆盖类已指定了并发修改策略。

      指定由:
      forEach 在接口 Iterable<E>
      参数:
      action - 要对每个元素执行的操作
      抛出:
      NullPointerException - 如果指定的操作为null
    • removeIf

      public boolean removeIf(Predicate<? super E> filter)
      从接口中复制的描述: Collection
      删除满足给定谓词的此集合的所有元素。在迭代期间抛出的错误或运行时异常或由谓词引发的异常将传递给调用者。
      指定由:
      removeIf 在接口 Collection<E>
      参数:
      filter - 一个返回true以便移除元素的谓词
      返回:
      如果有任何元素被移除,则返回true
      抛出:
      NullPointerException - 如果指定的过滤器为null
    • toString

      public String toString()
      返回此列表的字符串表示形式。字符串表示形式由列表元素的字符串表示形式组成,顺序与其迭代器返回的顺序相同,用方括号("[]")括起来。相邻元素由字符", "(逗号和空格)分隔。元素将按照String.valueOf(Object)进行转换。
      覆盖:
      toString 在类 Object
      返回:
      此列表的字符串表示形式
    • equals

      public boolean equals(Object o)
      比较指定的对象与此列表是否相等。如果指定的对象与此对象相同,或者如果它也是一个List,并且通过指定列表上的迭代器返回的元素序列与通过此列表上的迭代器返回的序列相同,则返回true。如果两个序列具有相同的长度,并且在序列中相同位置的对应元素是相等的,则认为这两个序列是相同的。如果两个元素e1e2被认为是相等,则Objects.equals(e1, e2)
      指定者:
      equals 在接口 Collection<E>
      指定者:
      equals 在接口 List<E>
      覆盖:
      equals 在类 Object
      参数:
      o - 与此列表进行比较的对象
      返回:
      如果指定的对象等于此列表,则返回true
      参见:
    • hashCode

      public int hashCode()
      返回此列表的哈希码值。

      此实现使用List.hashCode()中的定义。

      指定者:
      hashCode 在接口 Collection<E>
      指定者:
      hashCode 在接口 List<E>
      覆盖:
      hashCode 在类 Object
      返回:
      此列表的哈希码值
      参见:
    • iterator

      public Iterator<E> iterator()
      返回此列表中元素的迭代器,按正确的顺序。

      返回的迭代器提供了在构造迭代器时列表状态的快照。在遍历迭代器时不需要同步。迭代器不支持remove方法。

      指定者:
      iterator 在接口 Collection<E>
      指定者:
      iterator 在接口 Iterable<E>
      指定者:
      iterator 在接口 List<E>
      返回:
      返回此列表中元素的迭代器,按正确的顺序
    • listIterator

      public ListIterator<E> listIterator()
      返回此列表中元素的列表迭代器(按正确的顺序)。

      返回的迭代器提供了在构造迭代器时列表状态的快照。在遍历迭代器时不需要同步。迭代器不支持removesetadd方法。

      指定者:
      listIterator 在接口 List<E>
      返回:
      返回此列表中元素的列表迭代器(按正确的顺序)
    • listIterator

      public ListIterator<E> listIterator(int index)
      返回此列表中元素的列表迭代器(按正确的顺序),从列表中指定的位置开始。指定的索引表示通过初始调用next将返回的第一个元素。初始调用previous将返回指定索引减一的元素。

      返回的迭代器提供了在构造迭代器时列表状态的快照。在遍历迭代器时不需要同步。迭代器不支持removesetadd方法。

      指定者:
      listIterator 在接口 List<E>
      参数:
      index - 要从列表迭代器返回的第一个元素的索引(通过调用next
      返回:
      返回此列表中元素的列表迭代器(按正确的顺序),从列表中指定的位置开始
      抛出:
      IndexOutOfBoundsException - 如果索引超出范围(index < 0 || index > size()
    • spliterator

      public Spliterator<E> spliterator()
      返回此列表中元素的Spliterator

      Spliterator报告Spliterator.IMMUTABLESpliterator.ORDEREDSpliterator.SIZEDSpliterator.SUBSIZED

      在操作spliterator时,spliterator提供了在构造spliterator时列表状态的快照。不需要在操作spliterator时进行同步。

      指定者:
      spliterator 在接口 Collection<E>
      指定者:
      spliterator 在接口 Iterable<E>
      指定者:
      spliterator 在接口 List<E>
      返回:
      返回此列表中元素的Spliterator
      自:
      1.8
    • subList

      public List<E> subList(int fromIndex, int toIndex)
      返回此列表中从fromIndex(包括)到toIndex(不包括)的部分的视图。返回的列表由此列表支持,因此返回列表中的更改会反映在此列表中。

      如果通过返回的列表以外的任何方式修改支持列表(即,此列表),则此方法返回的列表的语义将变得不确定。

      指定者:
      subList 在接口 List<E>
      参数:
      fromIndex - 子列表的低端点(包括)
      toIndex - 子列表的高端点(不包括)
      返回:
      返回此列表中指定范围的视图
      抛出:
      IndexOutOfBoundsException - 对于非法的端点索引值(fromIndex < 0 || toIndex > size || fromIndex > toIndex
    • reversed

      public List<E> reversed()
      返回此集合的逆序视图。返回视图中元素的遭遇顺序与此集合中元素的遭遇顺序相反。逆序排序会影响所有对顺序敏感的操作,包括对返回视图集合的操作。如果集合实现允许修改此视图,则对此视图的修改会“写入”到基础集合。对基础集合的更改可能会或可能不会在此逆序视图中可见,这取决于实现。

      允许对逆序视图进行修改,并将传播到此列表。此外,对此列表的修改将在逆序视图中可见。逆序视图的子列表和迭代器具有与此列表相同的限制。

      指定由:
      reversed 在接口 List<E>
      指定由:
      reversed 在接口 SequencedCollection<E>
      返回:
      一个以相反顺序排列的此集合视图,作为一个List
      自:
      21