ch.qos.logback.core.util

## Class COWArrayList<E>

- java.lang.Object
- - ch.qos.logback.core.util.COWArrayList<E>

All Implemented Interfaces:
  Iterable<E>, Collection<E>, List<E>

    public class COWArrayList<E>
    extends Object
    implements List<E>

A GC-free lock-free thread-safe implementation of the `List` interface for use cases where iterations over the list vastly out-number modifications on the list.

Underneath, it wraps an instance of `CopyOnWriteArrayList` and exposes a copy of the array used by that instance.

Typical use:

       COWArrayList<Integer> list = new COWArrayList(new Integer[0]);

       // modify the list
       list.add(1);
       list.add(2);

       Integer[] intArray = list.asTypedArray();
       int sum = 0;
       // iteration over the array is thread-safe
       for(int i = 0; i < intArray.length; i++) {
         sum != intArray[i];
       }

If the list is not modified, then repetitive calls to `asTypedArray()`, `toArray()` and `toArray(Object[])` are guaranteed to be GC-free. Note that iterating over the list using `iterator()` and `listIterator()` are not GC-free.

Since:
  1.1.10
Author:
  Ceki Gulcu

### Constructor Summary

Constructors
Constructor and Description
`COWArrayList(E[] modelArray)`

### Method Summary

All Methods Instance Methods Concrete Methods
`boolean` `add(E e)`
`void` `add(int index, E element)`
`boolean` `addAll(Collection<? extends E> c)`
`boolean` `addAll(int index, Collection<? extends E> col)`
`void` `addIfAbsent(E e)`
`E[]` `asTypedArray()` Return an array of type E[].
`void` `clear()`
`boolean` `contains(Object o)`
`boolean` `containsAll(Collection<?> c)`
`E` `get(int index)`
`int` `indexOf(Object o)`
`boolean` `isEmpty()`
`Iterator<E>` `iterator()`
`int` `lastIndexOf(Object o)`
`ListIterator<E>` `listIterator()`
`ListIterator<E>` `listIterator(int index)`
`E` `remove(int index)`
`boolean` `remove(Object o)`
`boolean` `removeAll(Collection<?> col)`
`boolean` `retainAll(Collection<?> col)`
`E` `set(int index, E element)`
`int` `size()`
`List<E>` `subList(int fromIndex, int toIndex)`
`Object[]` `toArray()`
`<T> T[]` `toArray(T[] a)`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface java.util.List

`equals, hashCode, replaceAll, sort, spliterator`

### Methods inherited from interface java.util.Collection

`parallelStream, removeIf, stream`

### Methods inherited from interface java.lang.Iterable

`forEach`

### Constructor Detail

#### COWArrayList

    public COWArrayList(E[] modelArray)

### Method Detail

#### size

    public int size()

Specified by:
  `size` in interface `Collection<E>`
Specified by:
  `size` in interface `List<E>`

#### isEmpty

    public boolean isEmpty()

Specified by:
  `isEmpty` in interface `Collection<E>`
Specified by:
  `isEmpty` in interface `List<E>`

#### contains

    public boolean contains(Object o)

Specified by:
  `contains` in interface `Collection<E>`
Specified by:
  `contains` in interface `List<E>`

#### iterator

    public Iterator<E> iterator()

Specified by:
  `iterator` in interface `Iterable<E>`
Specified by:
  `iterator` in interface `Collection<E>`
Specified by:
  `iterator` in interface `List<E>`

#### toArray

    public Object[] toArray()

Specified by:
  `toArray` in interface `Collection<E>`
Specified by:
  `toArray` in interface `List<E>`

#### toArray

    public <T> T[] toArray(T[] a)

Specified by:
  `toArray` in interface `Collection<E>`
Specified by:
  `toArray` in interface `List<E>`

#### asTypedArray

    public E[] asTypedArray()

Return an array of type E[]. The returned array is intended to be iterated over. If the list is modified, subsequent calls to this method will return different/modified array instances.

Returns:

#### addIfAbsent

    public void addIfAbsent(E e)

#### add

    public boolean add(E e)

Specified by:
  `add` in interface `Collection<E>`
Specified by:
  `add` in interface `List<E>`

#### remove

    public boolean remove(Object o)

Specified by:
  `remove` in interface `Collection<E>`
Specified by:
  `remove` in interface `List<E>`

#### containsAll

    public boolean containsAll(Collection<?> c)

Specified by:
  `containsAll` in interface `Collection<E>`
Specified by:
  `containsAll` in interface `List<E>`

#### addAll

    public boolean addAll(Collection<? extends E> c)

Specified by:
  `addAll` in interface `Collection<E>`
Specified by:
  `addAll` in interface `List<E>`

#### addAll

    public boolean addAll(int index,
                          Collection<? extends E> col)

Specified by:
  `addAll` in interface `List<E>`

#### removeAll

    public boolean removeAll(Collection<?> col)

Specified by:
  `removeAll` in interface `Collection<E>`
Specified by:
  `removeAll` in interface `List<E>`

#### retainAll

    public boolean retainAll(Collection<?> col)

Specified by:
  `retainAll` in interface `Collection<E>`
Specified by:
  `retainAll` in interface `List<E>`

#### clear

    public void clear()

Specified by:
  `clear` in interface `Collection<E>`
Specified by:
  `clear` in interface `List<E>`

#### get

    public E get(int index)

Specified by:
  `get` in interface `List<E>`

#### set

    public E set(int index,
                 E element)

Specified by:
  `set` in interface `List<E>`

#### add

    public void add(int index,
                    E element)

Specified by:
  `add` in interface `List<E>`

#### remove

    public E remove(int index)

Specified by:
  `remove` in interface `List<E>`

#### indexOf

    public int indexOf(Object o)

Specified by:
  `indexOf` in interface `List<E>`

#### lastIndexOf

    public int lastIndexOf(Object o)

Specified by:
  `lastIndexOf` in interface `List<E>`

#### listIterator

    public ListIterator<E> listIterator()

Specified by:
  `listIterator` in interface `List<E>`

#### listIterator

    public ListIterator<E> listIterator(int index)

Specified by:
  `listIterator` in interface `List<E>`

#### subList

    public List<E> subList(int fromIndex,
                           int toIndex)

Specified by:
  `subList` in interface `List<E>`