Class SparseArrayLinkedList<E>
- java.lang.Object
-
- org.apache.activemq.artemis.utils.collections.SparseArrayLinkedList<E>
-
public final class SparseArrayLinkedList<E> extends Object
This list share the same motivation and structure of https://en.wikipedia.org/wiki/Unrolled_linked_list: it's a linked list of arrays/chunks ofT.
Differently from anUnrolledLinkedListthis list doesn't optimize addition and removal to achieve a balanced utilization among chunks ie a chunk is removed only if empty and chunks can't be merged. This list has been optimized for small-sized chunks (ideally <= 32 elements): this allow search/removal to be performed with a greedy approach despite a sparse chunk utilization (ie chunks contains few sparse elements).
From the memory footprint's point of view, this list won't remove the last remaining array although empty to optimize the case where its capacity would be enough to hold incoming elements, hence saving a new array allocation.
-
-
Constructor Summary
Constructors Constructor Description SparseArrayLinkedList()SparseArrayLinkedList(int sparseArrayCapacity)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidadd(E e)Appendseto the end of this list.static <E> voidaddToSparseArrayList(List<org.apache.activemq.artemis.utils.collections.SparseArrayLinkedList.SparseArray<E>> sparseArrayList, E e, int sparseArrayCapacity)longclear(Consumer<? super E> consumer)Clear while consuming (using the givenconsumerall the elements of this list.static <E> longclearSparseArrayList(List<org.apache.activemq.artemis.utils.collections.SparseArrayLinkedList.SparseArray<E>> sparseArrayList, Consumer<? super E> consumer)longremove(Predicate<? super E> filter)Removes any element of the list matching the given predicate.static <E> longremoveFromSparseArrayList(List<org.apache.activemq.artemis.utils.collections.SparseArrayLinkedList.SparseArray<E>> sparseArrayList, Predicate<? super E> filter)longsize()Returns the number of elements of this list.intsparseArrayCapacity()Returns the configured capacity of each sparse array/chunk.intsparseArraysCount()Returns the number of sparse arrays/chunks of this list.
-
-
-
Method Detail
-
removeFromSparseArrayList
public static <E> long removeFromSparseArrayList(List<org.apache.activemq.artemis.utils.collections.SparseArrayLinkedList.SparseArray<E>> sparseArrayList, Predicate<? super E> filter)
-
addToSparseArrayList
public static <E> void addToSparseArrayList(List<org.apache.activemq.artemis.utils.collections.SparseArrayLinkedList.SparseArray<E>> sparseArrayList, E e, int sparseArrayCapacity)
-
clearSparseArrayList
public static <E> long clearSparseArrayList(List<org.apache.activemq.artemis.utils.collections.SparseArrayLinkedList.SparseArray<E>> sparseArrayList, Consumer<? super E> consumer)
-
add
public void add(E e)
Appendseto the end of this list.
-
remove
public long remove(Predicate<? super E> filter)
Removes any element of the list matching the given predicate.
-
clear
public long clear(Consumer<? super E> consumer)
Clear while consuming (using the givenconsumerall the elements of this list.
-
size
public long size()
Returns the number of elements of this list.
-
sparseArrayCapacity
public int sparseArrayCapacity()
Returns the configured capacity of each sparse array/chunk.
-
sparseArraysCount
public int sparseArraysCount()
Returns the number of sparse arrays/chunks of this list.
-
-