Package 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
Description
`COWArrayList(E[] modelArray)`

## Method Summary

Modifier and Type
Method
Description
`void`
`add(int index, E element)`
`boolean`
`add(E e)`
`boolean`
`addAll(int index, Collection<? extends E> col)`
`boolean`
`addAll(Collection<? extends E> c)`
`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.Collection

`parallelStream, removeIf, stream, toArray`

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

`forEach`

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

`equals, hashCode, replaceAll, sort, spliterator`

## Constructor Details

### COWArrayList

public COWArrayList(E[] modelArray)

## Method Details

### 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 `Collection<E>`
Specified by:
  `iterator` in interface `Iterable<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>`