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 theListinterface for use cases where iterations over the list vastly out-number modifications on the list.Underneath, it wraps an instance of
CopyOnWriteArrayListand exposes a copy of the array used by that instance.Typical use:
COWArrayList
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()andtoArray(Object[])are guaranteed to be GC-free. Note that iterating over the list usingiterator()andlistIterator()are not GC-free.- Since:
- 1.1.10
-
-
Constructor Summary
Constructors Constructor Description COWArrayList(E[] modelArray)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidadd(int index, E element)booleanadd(E e)booleanaddAll(int index, Collection<? extends E> col)booleanaddAll(Collection<? extends E> c)voidaddIfAbsent(E e)E[]asTypedArray()Return an array of type E[].voidclear()booleancontains(Object o)booleancontainsAll(Collection<?> c)Eget(int index)intindexOf(Object o)booleanisEmpty()Iterator<E>iterator()intlastIndexOf(Object o)ListIterator<E>listIterator()ListIterator<E>listIterator(int index)Eremove(int index)booleanremove(Object o)booleanremoveAll(Collection<?> col)booleanretainAll(Collection<?> col)Eset(int index, E element)intsize()List<E>subList(int fromIndex, int toIndex)Object[]toArray()<T> T[]toArray(T[] a)-
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface java.util.Collection
parallelStream, removeIf, stream, toArray
-
Methods inherited from interface java.util.List
equals, hashCode, replaceAll, sort, spliterator
-
-
-
-
Constructor Detail
-
COWArrayList
public COWArrayList(E[] modelArray)
-
-
Method Detail
-
size
public int size()
-
isEmpty
public boolean isEmpty()
-
contains
public boolean contains(Object o)
-
toArray
public Object[] toArray()
-
toArray
public <T> T[] toArray(T[] a)
-
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)
-
remove
public boolean remove(Object o)
-
containsAll
public boolean containsAll(Collection<?> c)
- Specified by:
containsAllin interfaceCollection<E>- Specified by:
containsAllin interfaceList<E>
-
addAll
public boolean addAll(Collection<? extends E> c)
-
addAll
public boolean addAll(int index, Collection<? extends E> col)
-
removeAll
public boolean removeAll(Collection<?> col)
-
retainAll
public boolean retainAll(Collection<?> col)
-
clear
public void clear()
-
lastIndexOf
public int lastIndexOf(Object o)
- Specified by:
lastIndexOfin interfaceList<E>
-
listIterator
public ListIterator<E> listIterator()
- Specified by:
listIteratorin interfaceList<E>
-
listIterator
public ListIterator<E> listIterator(int index)
- Specified by:
listIteratorin interfaceList<E>
-
-