public class GrowthList<E> extends AbstractSerializableListDecorator<E>
List
to make it seamlessly grow when
indices larger than the list size are used on add and set,
avoiding most IndexOutOfBoundsExceptions.
This class avoids errors by growing when a set or add method would normally throw an IndexOutOfBoundsException. Note that IndexOutOfBoundsException IS returned for invalid negative indices.
Trying to set or add to an index larger than the size will cause the list
to grow (using null
elements). Clearly, care must be taken
not to use excessively large indices, as the internal list will grow to
match.
Trying to use any method other than add or set with an invalid index will call the underlying list and probably result in an IndexOutOfBoundsException.
Take care when using this list with null
values, as
null
is the value added when growing the list.
All sub-lists will access the underlying list directly, and will throw IndexOutOfBoundsExceptions.
This class differs from LazyList
because here growth occurs on
set and add, where LazyList
grows on get. However, they
can be used together by decorating twice.
LazyList
,
Serialized FormModifier | Constructor and Description |
---|---|
|
GrowthList()
Constructor that uses an ArrayList internally.
|
|
GrowthList(int initialSize)
Constructor that uses an ArrayList internally.
|
protected |
GrowthList(List<E> list)
Constructor that wraps (not copies).
|
Modifier and Type | Method and Description |
---|---|
void |
add(int index,
E element)
Decorate the add method to perform the growth behaviour.
|
boolean |
addAll(int index,
Collection<? extends E> coll)
Decorate the addAll method to perform the growth behaviour.
|
static <E> GrowthList<E> |
growthList(List<E> list)
Factory method to create a growth list.
|
E |
set(int index,
E element)
Decorate the set method to perform the growth behaviour.
|
decorated, equals, get, hashCode, indexOf, lastIndexOf, listIterator, listIterator, remove, subList
add, addAll, clear, contains, containsAll, isEmpty, iterator, remove, removeAll, removeIf, retainAll, setCollection, size, toArray, toArray, toString
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
add, addAll, clear, contains, containsAll, isEmpty, iterator, remove, removeAll, replaceAll, retainAll, size, sort, spliterator, toArray, toArray
parallelStream, removeIf, stream
public GrowthList()
public GrowthList(int initialSize)
initialSize
- the initial size of the ArrayListIllegalArgumentException
- if initial size is invalidprotected GrowthList(List<E> list)
list
- the list to decorate, must not be nullNullPointerException
- if list is nullpublic static <E> GrowthList<E> growthList(List<E> list)
E
- the type of the elements in the listlist
- the list to decorate, must not be nullNullPointerException
- if list is nullpublic void add(int index, E element)
If the requested index is greater than the current size, the list will
grow to the new size. Indices between the old size and the requested
size will be filled with null
.
If the index is less than the current size, the value will be added to the underlying list directly. If the index is less than zero, the underlying list is called, which will probably throw an IndexOutOfBoundsException.
add
in interface List<E>
add
in class AbstractListDecorator<E>
index
- the index to add atelement
- the object to add at the specified indexUnsupportedOperationException
- if the underlying list doesn't implement setClassCastException
- if the underlying list rejects the elementIllegalArgumentException
- if the underlying list rejects the elementpublic boolean addAll(int index, Collection<? extends E> coll)
If the requested index is greater than the current size, the list will
grow to the new size. Indices between the old size and the requested
size will be filled with null
.
If the index is less than the current size, the values will be added to the underlying list directly. If the index is less than zero, the underlying list is called, which will probably throw an IndexOutOfBoundsException.
addAll
in interface List<E>
addAll
in class AbstractListDecorator<E>
index
- the index to add atcoll
- the collection to add at the specified indexUnsupportedOperationException
- if the underlying list doesn't implement setClassCastException
- if the underlying list rejects the elementIllegalArgumentException
- if the underlying list rejects the elementpublic E set(int index, E element)
If the requested index is greater than the current size, the list will
grow to the new size. Indices between the old size and the requested
size will be filled with null
.
If the index is less than the current size, the value will be set onto the underlying list directly. If the index is less than zero, the underlying list is called, which will probably throw an IndexOutOfBoundsException.
set
in interface List<E>
set
in class AbstractListDecorator<E>
index
- the index to setelement
- the object to set at the specified indexUnsupportedOperationException
- if the underlying list doesn't implement setClassCastException
- if the underlying list rejects the elementIllegalArgumentException
- if the underlying list rejects the elementCopyright © 2001–2019 The Apache Software Foundation. All rights reserved.