org.springframework.util

## Class AutoPopulatingList<E>

- java.lang.Object
- - org.springframework.util.AutoPopulatingList<E>

All Implemented Interfaces:
  Serializable, Iterable<E>, Collection<E>, List<E>

    public class AutoPopulatingList<E>
    extends Object
    implements List<E>, Serializable

Simple `List` wrapper class that allows for elements to be automatically populated as they are requested. This is particularly useful for data binding to `Lists`, allowing for elements to be created and added to the `List` in a "just in time" fashion.

Note: This class is not thread-safe. To create a thread-safe version, use the `Collections.synchronizedList(java.util.List<T>)` utility methods.

Inspired by `LazyList` from Commons Collections.

Since:
  2.0
Author:
  Rob Harrop, Juergen Hoeller
See Also:
  Serialized Form

### Nested Class Summary

Nested Classes
`static interface` `AutoPopulatingList.ElementFactory<E>` Factory interface for creating elements for an index-based access data structure such as a `List`.
`static class` `AutoPopulatingList.ElementInstantiationException` Exception to be thrown from ElementFactory.

### Constructor Summary

Constructors
Constructor and Description
`AutoPopulatingList(AutoPopulatingList.ElementFactory<E> elementFactory)` Creates a new `AutoPopulatingList` that is backed by a standard `ArrayList` and creates new elements on demand using the supplied `AutoPopulatingList.ElementFactory`.
`AutoPopulatingList(Class<? extends E> elementClass)` Creates a new `AutoPopulatingList` that is backed by a standard `ArrayList` and adds new instances of the supplied `element Class` to the backing `List` on demand.
`AutoPopulatingList(List<E> backingList, AutoPopulatingList.ElementFactory<E> elementFactory)` Creates a new `AutoPopulatingList` that is backed by the supplied `List` and creates new elements on demand using the supplied `AutoPopulatingList.ElementFactory`.
`AutoPopulatingList(List<E> backingList, Class<? extends E> elementClass)` Creates a new `AutoPopulatingList` that is backed by the supplied `List` and adds new instances of the supplied `element Class` to the backing `List` on demand.

### Method Summary

Methods
`boolean` `add(E o)`
`void` `add(int index, E element)`
`boolean` `addAll(Collection<? extends E> c)`
`boolean` `addAll(int index, Collection<? extends E> c)`
`void` `clear()`
`boolean` `contains(Object o)`
`boolean` `containsAll(Collection c)`
`boolean` `equals(Object other)`
`E` `get(int index)` Get the element at the supplied index, creating it if there is no element at that index.
`int` `hashCode()`
`int` `indexOf(Object o)`
`boolean` `isEmpty()`
`Iterator<E>` `iterator()`
`int` `lastIndexOf(Object o)`
`ListIterator<E>` `listIterator()`
`ListIterator<E>` `listIterator(int index)`
`E` `remove(int index)`
`boolean` `remove(Object o)`
`boolean` `removeAll(Collection<?> c)`
`boolean` `retainAll(Collection<?> c)`
`E` `set(int index, E element)`
`int` `size()`
`List<E>` `subList(int fromIndex, int toIndex)`
`Object[]` `toArray()`
`<T> T[]` `toArray(T[] a)`

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### AutoPopulatingList

    public AutoPopulatingList(Class<? extends E> elementClass)

Creates a new `AutoPopulatingList` that is backed by a standard `ArrayList` and adds new instances of the supplied `element Class` to the backing `List` on demand.

#### AutoPopulatingList

    public AutoPopulatingList(List<E> backingList,
                      Class<? extends E> elementClass)

Creates a new `AutoPopulatingList` that is backed by the supplied `List` and adds new instances of the supplied `element Class` to the backing `List` on demand.

#### AutoPopulatingList

    public AutoPopulatingList(AutoPopulatingList.ElementFactory<E> elementFactory)

Creates a new `AutoPopulatingList` that is backed by a standard `ArrayList` and creates new elements on demand using the supplied `AutoPopulatingList.ElementFactory`.

#### AutoPopulatingList

    public AutoPopulatingList(List<E> backingList,
                      AutoPopulatingList.ElementFactory<E> elementFactory)

Creates a new `AutoPopulatingList` that is backed by the supplied `List` and creates new elements on demand using the supplied `AutoPopulatingList.ElementFactory`.

### Method Detail

#### add

    public void add(int index,
           E element)

Specified by:
  `add` in interface `List<E>`

#### add

    public boolean add(E o)

Specified by:
  `add` in interface `Collection<E>`
Specified by:
  `add` in interface `List<E>`

#### addAll

    public boolean addAll(Collection<? extends E> c)

Specified by:
  `addAll` in interface `Collection<E>`
Specified by:
  `addAll` in interface `List<E>`

#### addAll

    public boolean addAll(int index,
                 Collection<? extends E> c)

Specified by:
  `addAll` in interface `List<E>`

#### clear

    public void clear()

Specified by:
  `clear` in interface `Collection<E>`
Specified by:
  `clear` in interface `List<E>`

#### contains

    public boolean contains(Object o)

Specified by:
  `contains` in interface `Collection<E>`
Specified by:
  `contains` in interface `List<E>`

#### containsAll

    public boolean containsAll(Collection c)

Specified by:
  `containsAll` in interface `Collection<E>`
Specified by:
  `containsAll` in interface `List<E>`

#### get

    public E get(int index)

Get the element at the supplied index, creating it if there is no element at that index.

Specified by:
  `get` in interface `List<E>`

#### indexOf

    public int indexOf(Object o)

Specified by:
  `indexOf` in interface `List<E>`

#### isEmpty

    public boolean isEmpty()

Specified by:
  `isEmpty` in interface `Collection<E>`
Specified by:
  `isEmpty` in interface `List<E>`

#### iterator

    public Iterator<E> iterator()

Specified by:
  `iterator` in interface `Iterable<E>`
Specified by:
  `iterator` in interface `Collection<E>`
Specified by:
  `iterator` in interface `List<E>`

#### lastIndexOf

    public int lastIndexOf(Object o)

Specified by:
  `lastIndexOf` in interface `List<E>`

#### listIterator

    public ListIterator<E> listIterator()

Specified by:
  `listIterator` in interface `List<E>`

#### listIterator

    public ListIterator<E> listIterator(int index)

Specified by:
  `listIterator` in interface `List<E>`

#### remove

    public E remove(int index)

Specified by:
  `remove` in interface `List<E>`

#### remove

    public boolean remove(Object o)

Specified by:
  `remove` in interface `Collection<E>`
Specified by:
  `remove` in interface `List<E>`

#### removeAll

    public boolean removeAll(Collection<?> c)

Specified by:
  `removeAll` in interface `Collection<E>`
Specified by:
  `removeAll` in interface `List<E>`

#### retainAll

    public boolean retainAll(Collection<?> c)

Specified by:
  `retainAll` in interface `Collection<E>`
Specified by:
  `retainAll` in interface `List<E>`

#### set

    public E set(int index,
        E element)

Specified by:
  `set` in interface `List<E>`

#### size

    public int size()

Specified by:
  `size` in interface `Collection<E>`
Specified by:
  `size` in interface `List<E>`

#### subList

    public List<E> subList(int fromIndex,
                  int toIndex)

Specified by:
  `subList` in interface `List<E>`

#### toArray

    public Object[] toArray()

Specified by:
  `toArray` in interface `Collection<E>`
Specified by:
  `toArray` in interface `List<E>`

#### toArray

    public <T> T[] toArray(T[] a)

Specified by:
  `toArray` in interface `Collection<E>`
Specified by:
  `toArray` in interface `List<E>`

#### equals

    public boolean equals(Object other)

Specified by:
  `equals` in interface `Collection<E>`
Specified by:
  `equals` in interface `List<E>`
Overrides:
  `equals` in class `Object`

#### hashCode

    public int hashCode()

Specified by:
  `hashCode` in interface `Collection<E>`
Specified by:
  `hashCode` in interface `List<E>`
Overrides:
  `hashCode` in class `Object`