Class BasicEList<E>

All Implemented Interfaces:
Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess, EList<E>
Direct Known Subclasses:
AbstractTreeIterator, BasicEList.FastCompare, BasicEList.UnmodifiableEList, BasicNotifierImpl.EAdapterList, NotificationChainImpl, NotifyingListImpl, UniqueEList

public class BasicEList<E> extends AbstractEList<E> implements RandomAccess, Cloneable, Serializable
A highly extensible list implementation.
See Also:
  • Field Details

    • size

      protected int size
      The size of the list.
    • data

      protected transient Object[] data
      The underlying data storage of the list.
  • Constructor Details

    • BasicEList

      public BasicEList()
      Creates an empty instance with no initial capacity. The data storage will be null.
    • BasicEList

      public BasicEList(int initialCapacity)
      Creates an empty instance with the given capacity.
      Parameters:
      initialCapacity - the initial capacity of the list before it must grow.
      Throws:
      IllegalArgumentException - if the initialCapacity is negative.
    • BasicEList

      public BasicEList(Collection<? extends E> collection)
      Creates an instance that is a copy of the collection.
      Parameters:
      collection - the initial contents of the list.
    • BasicEList

      protected BasicEList(int size, Object[] data)
      Creates an initialized instance that directly uses the given arguments.
      Parameters:
      size - the size of the list.
      data - the underlying storage of the list.
  • Method Details

    • newData

      protected Object[] newData(int capacity)
      Returns new allocated data storage. Clients may override this to create typed storage. The cost of type checking via a typed array is negligible.
      Returns:
      new data storage.
    • assign

      protected E assign(int index, E object)
      Assigns the object into the data storage at the given index and returns the object that's been stored. Clients can monitor access to the storage via this method.
      Parameters:
      index - the position of the new content.
      object - the new content.
      Returns:
      the object that's been stored.
    • size

      public int size()
      Returns the number of objects in the list.
      Specified by:
      size in interface Collection<E>
      Specified by:
      size in interface List<E>
      Specified by:
      size in class AbstractCollection<E>
      Returns:
      the number of objects in the list.
    • isEmpty

      public boolean isEmpty()
      Returns whether the list has zero size.
      Specified by:
      isEmpty in interface Collection<E>
      Specified by:
      isEmpty in interface List<E>
      Overrides:
      isEmpty in class AbstractCollection<E>
      Returns:
      whether the list has zero size.
    • contains

      public boolean contains(Object object)
      Returns whether the list contains the object. This implementation uses either equals or "==" depending on useEquals.
      Specified by:
      contains in interface Collection<E>
      Specified by:
      contains in interface List<E>
      Overrides:
      contains in class AbstractCollection<E>
      Parameters:
      object - the object in question.
      Returns:
      whether the list contains the object.
      See Also:
    • indexOf

      public int indexOf(Object object)
      Returns the position of the first occurrence of the object in the list. This implementation uses either equals or "==" depending on useEquals.
      Specified by:
      indexOf in interface List<E>
      Overrides:
      indexOf in class AbstractList<E>
      Parameters:
      object - the object in question.
      Returns:
      the position of the first occurrence of the object in the list.
    • lastIndexOf

      public int lastIndexOf(Object object)
      Returns the position of the last occurrence of the object in the list. This implementation uses either equals or "==" depending on useEquals.
      Specified by:
      lastIndexOf in interface List<E>
      Overrides:
      lastIndexOf in class AbstractList<E>
      Parameters:
      object - the object in question.
      Returns:
      the position of the last occurrence of the object in the list.
    • toArray

      public Object[] toArray()
      Returns an array containing all the objects in sequence. Clients may override newData to create typed storage in this case.
      Specified by:
      toArray in interface Collection<E>
      Specified by:
      toArray in interface List<E>
      Overrides:
      toArray in class AbstractCollection<E>
      Returns:
      an array containing all the objects in sequence.
      See Also:
    • toArray

      public <T> T[] toArray(T[] array)
      Returns an array containing all the objects in sequence.
      Specified by:
      toArray in interface Collection<E>
      Specified by:
      toArray in interface List<E>
      Overrides:
      toArray in class AbstractCollection<E>
      Parameters:
      array - the array that will be filled and returned, if it's big enough; otherwise, a suitably large array of the same type will be allocated and used instead.
      Returns:
      an array containing all the objects in sequence.
      See Also:
    • data

      public Object[] data()
      Returns direct unsafe access to the underlying data storage. Clients may not modify this and may not assume that the array remains valid as the list is modified.
      Returns:
      direct unsafe access to the underlying data storage.
    • setData

      public void setData(int size, Object[] data)
      Updates directly and unsafely the underlying data storage. Clients must be aware that this subverts all callbacks and hence possibly the integrity of the list.
    • get

      public E get(int index)
      Returns the object at the index. This implementation delegates to resolve so that clients may transform the fetched object.
      Specified by:
      get in interface List<E>
      Specified by:
      get in class AbstractList<E>
      Parameters:
      index - the position in question.
      Returns:
      the object at the index.
      Throws:
      IndexOutOfBoundsException - if the index isn't within the size range.
      See Also:
    • basicGet

      public E basicGet(int index)
      Returns the object at the index without resolving it.
      Overrides:
      basicGet in class AbstractEList<E>
      Parameters:
      index - the position in question.
      Returns:
      the object at the index.
      Throws:
      IndexOutOfBoundsException - if the index isn't within the size range.
      See Also:
    • primitiveGet

      protected E primitiveGet(int index)
      Returns the object at the index without resolving it and without range checking the index.
      Specified by:
      primitiveGet in class AbstractEList<E>
      Parameters:
      index - the position in question.
      Returns:
      the object at the index.
      See Also:
    • setUnique

      public E setUnique(int index, E object)
      Sets the object at the index and returns the old object at the index; it does no ranging checking or uniqueness checking. This implementation delegates to assign, didSet, and didChange.
      Specified by:
      setUnique in class AbstractEList<E>
      Parameters:
      index - the position in question.
      object - the object to set.
      Returns:
      the old object at the index.
      See Also:
    • addUnique

      public void addUnique(E object)
      Adds the object at the end of the list; it does no uniqueness checking. This implementation delegates to assign, didAdd, and didChange.
      Specified by:
      addUnique in class AbstractEList<E>
      Parameters:
      object - the object to be added.
      See Also:
    • addUnique

      public void addUnique(int index, E object)
      Adds the object at the given index in the list; it does no ranging checking or uniqueness checking. This implementation delegates to assign, didAdd, and didChange.
      Specified by:
      addUnique in class AbstractEList<E>
      Parameters:
      object - the object to be added.
      See Also:
    • addAllUnique

      public boolean addAllUnique(Collection<? extends E> collection)
      Adds each object of the collection to the end of the list; it does no uniqueness checking. This implementation delegates to assign, didAdd, and didChange.
      Specified by:
      addAllUnique in class AbstractEList<E>
      Parameters:
      collection - the collection of objects to be added.
      See Also:
    • addAllUnique

      public boolean addAllUnique(int index, Collection<? extends E> collection)
      Adds each object of the collection at each successive index in the list and returns whether any objects were added; it does no ranging checking or uniqueness checking. This implementation delegates to assign, didAdd, and didChange.
      Specified by:
      addAllUnique in class AbstractEList<E>
      Parameters:
      index - the index at which to add.
      collection - the collection of objects to be added.
      Returns:
      whether any objects were added.
      See Also:
    • addAllUnique

      public boolean addAllUnique(Object[] objects, int start, int end)
      Adds each object from start to end of the array at the index of list and returns whether any objects were added; it does no ranging checking or uniqueness checking. This implementation delegates to assign, didAdd, and didChange.
      Specified by:
      addAllUnique in class AbstractEList<E>
      Parameters:
      objects - the objects to be added.
      start - the index of first object to be added.
      end - the index past the last object to be added.
      Returns:
      whether any objects were added.
      See Also:
    • addAllUnique

      public boolean addAllUnique(int index, Object[] objects, int start, int end)
      Adds each object from start to end of the array at each successive index in the list and returns whether any objects were added; it does no ranging checking or uniqueness checking. This implementation delegates to assign, didAdd, and didChange.
      Specified by:
      addAllUnique in class AbstractEList<E>
      Parameters:
      index - the index at which to add.
      objects - the objects to be added.
      start - the index of first object to be added.
      end - the index past the last object to be added.
      Returns:
      whether any objects were added.
      See Also:
    • remove

      public E remove(int index)
      Removes the object at the index from the list and returns it. This implementation delegates to didRemove and didChange.
      Specified by:
      remove in interface List<E>
      Specified by:
      remove in class AbstractEList<E>
      Parameters:
      index - the position of the object to remove.
      Returns:
      the removed object.
      Throws:
      IndexOutOfBoundsException - if the index isn't within the size range.
    • clear

      public void clear()
      Clears the list of all objects. This implementation discards the data storage without modifying it and delegates to didClear and didChange.
      Specified by:
      clear in interface Collection<E>
      Specified by:
      clear in interface List<E>
      Overrides:
      clear in class AbstractList<E>
    • move

      public E move(int targetIndex, int sourceIndex)
      Moves the object at the source index of the list to the target index of the list and returns the moved object. This implementation delegates to assign, didMove, and didChange.
      Specified by:
      move in interface EList<E>
      Specified by:
      move in class AbstractEList<E>
      Parameters:
      targetIndex - the new position for the object in the list.
      sourceIndex - the old position of the object in the list.
      Returns:
      the moved object.
      Throws:
      IndexOutOfBoundsException - if either index isn't within the size range.
    • shrink

      public void shrink()
      Shrinks the capacity of the list to the minimal requirements.
      See Also:
    • grow

      public void grow(int minimumCapacity)
      Grows the capacity of the list to ensure that no additional growth is needed until the size exceeds the specified minimum capacity.
      See Also:
    • clone

      public Object clone()
      Returns a shallow copy of this list.
      Overrides:
      clone in class Object
      Returns:
      a shallow copy of this list.
    • basicList

      protected List<E> basicList()
      Returns an unsafe list that provides a non-resolving view of the underlying data storage.
      Specified by:
      basicList in class AbstractEList<E>
      Returns:
      an unsafe list that provides a non-resolving view of the underlying data storage.