Class GrowthList<E>
- Type Parameters:
- E- the type of the elements in the list.
- All Implemented Interfaces:
- Serializable,- Iterable<E>,- Collection<E>,- List<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.
 
- Since:
- 3.2
- See Also:
- 
Constructor SummaryConstructorsModifierConstructorDescriptionConstructor that uses an ArrayList internally.GrowthList(int initialCapacity) Constructor that uses an ArrayList internally.protectedGrowthList(List<E> list) Constructor that wraps (not copies).
- 
Method SummaryModifier and TypeMethodDescriptionvoidDecorate the add method to perform the growth behavior.booleanaddAll(int index, Collection<? extends E> coll) Decorate the addAll method to perform the growth behavior.static <E> GrowthList<E> growthList(List<E> list) Factory method to create a growth list.Decorate the set method to perform the growth behavior.Methods inherited from class org.apache.commons.collections4.list.AbstractListDecoratordecorated, equals, get, hashCode, indexOf, lastIndexOf, listIterator, listIterator, remove, subListMethods inherited from class org.apache.commons.collections4.collection.AbstractCollectionDecoratoradd, addAll, clear, contains, containsAll, isEmpty, iterator, remove, removeAll, removeIf, retainAll, setCollection, size, toArray, toArray, toStringMethods inherited from class java.lang.Objectclone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface java.util.CollectionparallelStream, removeIf, stream
- 
Constructor Details- 
GrowthListpublic GrowthList()Constructor that uses an ArrayList internally.
- 
GrowthListConstructor that uses an ArrayList internally.- Parameters:
- initialCapacity- the initial capacity of the ArrayList
- Throws:
- IllegalArgumentException- if initial capacity is invalid
 
- 
GrowthListConstructor that wraps (not copies).- Parameters:
- list- the list to decorate, must not be null
- Throws:
- NullPointerException- if list is null
 
 
- 
- 
Method Details- 
growthListFactory method to create a growth list.- Type Parameters:
- E- the type of the elements in the list
- Parameters:
- list- the list to decorate, must not be null
- Returns:
- a new growth list
- Throws:
- NullPointerException- if list is null
- Since:
- 4.0
 
- 
addDecorate the add method to perform the growth behavior.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. - Specified by:
- addin interface- List<E>
- Overrides:
- addin class- AbstractListDecorator<E>
- Parameters:
- index- the index to add at
- element- the object to add at the specified index
- Throws:
- UnsupportedOperationException- if the underlying list doesn't implement set
- ClassCastException- if the underlying list rejects the element
- IllegalArgumentException- if the underlying list rejects the element
 
- 
addAllDecorate the addAll method to perform the growth behavior.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. - Specified by:
- addAllin interface- List<E>
- Overrides:
- addAllin class- AbstractListDecorator<E>
- Parameters:
- index- the index to add at
- coll- the collection to add at the specified index
- Returns:
- true if the list changed
- Throws:
- UnsupportedOperationException- if the underlying list doesn't implement set
- ClassCastException- if the underlying list rejects the element
- IllegalArgumentException- if the underlying list rejects the element
 
- 
setDecorate the set method to perform the growth behavior.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. - Specified by:
- setin interface- List<E>
- Overrides:
- setin class- AbstractListDecorator<E>
- Parameters:
- index- the index to set
- element- the object to set at the specified index
- Returns:
- the object previously at that index
- Throws:
- UnsupportedOperationException- if the underlying list doesn't implement set
- ClassCastException- if the underlying list rejects the element
- IllegalArgumentException- if the underlying list rejects the element
 
 
-