Class GrowthList

All Implemented Interfaces:
Serializable, Iterable, Collection, List, SequencedCollection

@Deprecated(since="2021-04-30") public class GrowthList extends AbstractSerializableListDecorator
Deprecated.
Apache Commons Collections version 3.x is being deprecated from AEMaaCS. The upgraded version 4.4 of Commons Collections is already included as replacement. Customers are advised to upgrade to this version of the library. Please note: the package name was changed to org.apache.commons.collections4. Further note that there are AEM APIs currently exposing the old collections classes; these will be updated in upcoming releases.
Decorates another 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:
Commons Collections 3.2
See Also:
  • Constructor Details

    • GrowthList

      public GrowthList()
      Deprecated.
      Constructor that uses an ArrayList internally.
    • GrowthList

      public GrowthList(int initialSize)
      Deprecated.
      Constructor that uses an ArrayList internally.
      Parameters:
      initialSize - the initial size of the ArrayList
      Throws:
      IllegalArgumentException - if initial size is invalid
  • Method Details

    • decorate

      public static List decorate(List list)
      Deprecated.
      Factory method to create a growth list.
      Parameters:
      list - the list to decorate, must not be null
      Throws:
      IllegalArgumentException - if list is null
    • add

      public void add(int index, Object element)
      Deprecated.
      Decorate the add method to perform the growth behaviour.

      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:
      add in interface List
      Overrides:
      add in class AbstractListDecorator
      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
    • addAll

      public boolean addAll(int index, Collection coll)
      Deprecated.
      Decorate the addAll method to perform the growth behaviour.

      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:
      addAll in interface List
      Overrides:
      addAll in class AbstractListDecorator
      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
    • set

      public Object set(int index, Object element)
      Deprecated.
      Decorate the set method to perform the growth behaviour.

      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:
      set in interface List
      Overrides:
      set in class AbstractListDecorator
      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