Class ImmutableAbstractList<E>

java.lang.Object
org.djutils.immutablecollections.ImmutableAbstractCollection<E>
org.djutils.immutablecollections.ImmutableAbstractList<E>
Type Parameters:
E - the type of content of this List
All Implemented Interfaces:
Serializable, Iterable<E>, RandomAccess, ImmutableCollection<E>, ImmutableList<E>
Direct Known Subclasses:
ImmutableArrayList, ImmutableVector

public abstract class ImmutableAbstractList<E>
extends ImmutableAbstractCollection<E>
implements ImmutableList<E>, RandomAccess
An abstract base class for an immutable wrapper for a List.

Copyright (c) 2016-2020 Delft University of Technology, Jaffalaan 5, 2628 BX Delft, the Netherlands. All rights reserved. See for project information https://djutils.org. The DJUTILS project is distributed under a three-clause BSD-style license, which can be found at https://djutils.org/docs/license.html.

Author:
Alexander Verbraeck, Peter Knoppers, Wouter Schakel
See Also:
Serialized Form
  • Field Summary

    Fields inherited from class org.djutils.immutablecollections.ImmutableAbstractCollection

    copyOrWrap
  • Constructor Summary

    Constructors 
    Modifier Constructor Description
    protected ImmutableAbstractList​(List<E> list, Immutable copyOrWrap)
    Construct an abstract immutable list.
  • Method Summary

    Modifier and Type Method Description
    boolean contains​(Object o)
    Returns true if this immutable collection contains the specified element.
    boolean containsAll​(Collection<?> c)
    Returns true if this immutable collection contains all of the elements in the specified collection.
    boolean containsAll​(ImmutableCollection<?> c)
    Returns true if this immutable collection contains all of the elements in the specified immutable collection.
    boolean equals​(Object obj)
    Force to redefine equals for the implementations of immutable collection classes.
    void forEach​(Consumer<? super E> action)
    E get​(int index)
    Returns the element at the specified position in this immutable list.
    protected List<E> getUnderlyingCollection()
    Returns the underlying collection of this immutable collection.
    int hashCode()
    Force to redefine hashCode for the implementations of immutable collection classes.
    int indexOf​(Object o)
    Returns the index of the first occurrence of the specified element in this immutable list, or -1 if this immutable list does not contain the element.
    boolean isEmpty()
    Returns true if this immutable collection contains no elements.
    boolean isWrap()
    Return whether the internal storage is a wrapped pointer to the original collection.
    ImmutableIterator<E> iterator()
    Returns an immutable iterator over the elements in this immutable collection.
    int lastIndexOf​(Object o)
    Returns the index of the last occurrence of the specified element in this immutable list, or -1 if this immutable list does not contain the element.
    Stream<E> parallelStream()
    Returns a possibly parallel Stream with this collection as its source.
    int size()
    Returns the number of elements in this immutable collection.
    Spliterator<E> spliterator()
    Creates a Spliterator over the elements in this collection.
    Stream<E> stream()
    Returns a sequential Stream with this collection as its source.
    Object[] toArray()
    Returns an array containing all of the elements in this immutable collection.
    <T> T[] toArray​(T[] a)
    Returns an array containing all of the elements in this immutable collection; the runtime type of the returned array is that of the specified array.
    Collection<E> toCollection()
    Returns a modifiable copy of this immutable collection.

    Methods inherited from class java.lang.Object

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

    Methods inherited from interface org.djutils.immutablecollections.ImmutableCollection

    isCopy

    Methods inherited from interface org.djutils.immutablecollections.ImmutableList

    subList, toList, toString
  • Constructor Details

    • ImmutableAbstractList

      protected ImmutableAbstractList​(List<E> list, Immutable copyOrWrap)
      Construct an abstract immutable list. Make sure that the argument is a safe copy of the list or pointer to the list of the right type! Copying does not take place in the Abstract class!
      Parameters:
      list - List<E>; a safe copy of the list, or pointer to the list to use for the immutable list
      copyOrWrap - Immutable; indicate whether the immutable is a copy or a wrap
  • Method Details

    • toCollection

      public final Collection<E> toCollection()
      Returns a modifiable copy of this immutable collection.
      Specified by:
      toCollection in interface ImmutableCollection<E>
      Returns:
      a modifiable copy of this immutable collection.
    • getUnderlyingCollection

      protected List<E> getUnderlyingCollection()
      Returns the underlying collection of this immutable collection. In case of Immutable.WRAP, this will be the original collection. In case of IMMUTABLE.COPY, this will be the internally stored (mutable) copy of the collection.
      Specified by:
      getUnderlyingCollection in class ImmutableAbstractCollection<E>
      Returns:
      the underlying collection of this immutable collection.
    • size

      public final int size()
      Returns the number of elements in this immutable collection. If this immutable collection contains more than Integer.MAX_VALUE elements, returns Integer.MAX_VALUE.
      Specified by:
      size in interface ImmutableCollection<E>
      Returns:
      the number of elements in this immutable collection
    • isEmpty

      public final boolean isEmpty()
      Returns true if this immutable collection contains no elements.
      Specified by:
      isEmpty in interface ImmutableCollection<E>
      Returns:
      true if this immutable collection contains no elements
    • contains

      public final boolean contains​(Object o)
      Returns true if this immutable collection contains the specified element. More formally, returns true if and only if this immutable collection contains at least one element e such that (o==null ? e==null : o.equals(e)).
      Specified by:
      contains in interface ImmutableCollection<E>
      Parameters:
      o - Object; element whose presence in this immutable collection is to be tested
      Returns:
      true if this immutable collection contains the specified element
    • indexOf

      public final int indexOf​(Object o)
      Returns the index of the first occurrence of the specified element in this immutable list, or -1 if this immutable list does not contain the element. More formally, returns the lowest index i such that (o==null ? get(i)==null : o.equals(get(i))), or -1 if there is no such index.
      Specified by:
      indexOf in interface ImmutableList<E>
      Parameters:
      o - Object; element to search for
      Returns:
      the index of the first occurrence of the specified element in this immutable list, or -1 if this immutable list does not contain the element
    • lastIndexOf

      public final int lastIndexOf​(Object o)
      Returns the index of the last occurrence of the specified element in this immutable list, or -1 if this immutable list does not contain the element. More formally, returns the highest index i such that (o==null ? get(i)==null : o.equals(get(i))), or -1 if there is no such index.
      Specified by:
      lastIndexOf in interface ImmutableList<E>
      Parameters:
      o - Object; element to search for
      Returns:
      the index of the last occurrence of the specified element in this immutable list, or -1 if this immutable list does not contain the element
    • toArray

      public final Object[] toArray()
      Returns an array containing all of the elements in this immutable collection. If this immutable collection makes any guarantees as to what order its elements are returned by its iterator, this method must return the elements in the same order.

      See java.util.Collection.toArray() for more details.

      Specified by:
      toArray in interface ImmutableCollection<E>
      Returns:
      an array containing all of the elements in this immutable collection
    • toArray

      public final <T> T[] toArray​(T[] a)
      Returns an array containing all of the elements in this immutable collection; the runtime type of the returned array is that of the specified array. If the immutable collection fits in the specified array, it is returned therein. Otherwise, a new array is allocated with the runtime type of the specified array and the size of this immutable collection.

      See java.util.Collection.toArray(T[]) for more details.

      Specified by:
      toArray in interface ImmutableCollection<E>
      Type Parameters:
      T - the runtime type of the array to contain the immutable collection
      Parameters:
      a - the array into which the elements of this immutable collection are to be stored, if it is big enough; otherwise, a new array of the same runtime type is allocated for this purpose.
      Returns:
      an array containing all of the elements in this immutable collection
    • get

      public final E get​(int index)
      Returns the element at the specified position in this immutable list.
      Specified by:
      get in interface ImmutableList<E>
      Parameters:
      index - int; index of the element to return
      Returns:
      the element at the specified position in this immutable list
    • iterator

      public final ImmutableIterator<E> iterator()
      Returns an immutable iterator over the elements in this immutable collection. There are no guarantees concerning the order in which the elements are returned (unless this immutable collection is an instance of some class that provides a guarantee). The ImmutableIterator is an Iterator where the remove() operation will throw an exception.
      Specified by:
      iterator in interface ImmutableCollection<E>
      Specified by:
      iterator in interface Iterable<E>
      Returns:
      an ImmutableIterator over the elements in this immutable collection
    • forEach

      public final void forEach​(Consumer<? super E> action)
      Specified by:
      forEach in interface Iterable<E>
    • spliterator

      public final Spliterator<E> spliterator()
      Creates a Spliterator over the elements in this collection. Implementations should document characteristic values reported by the spliterator. See java.util.Collection for more information.
      Specified by:
      spliterator in interface ImmutableCollection<E>
      Specified by:
      spliterator in interface Iterable<E>
      Returns:
      a Spliterator over the elements in this collection
    • containsAll

      public final boolean containsAll​(Collection<?> c)
      Returns true if this immutable collection contains all of the elements in the specified collection.
      Specified by:
      containsAll in interface ImmutableCollection<E>
      Parameters:
      c - Collection<?>; collection to be checked for containment in this immutable collection
      Returns:
      true if this immutable collection contains all of the elements in the specified collection
      See Also:
      ImmutableCollection.contains(Object)
    • containsAll

      public final boolean containsAll​(ImmutableCollection<?> c)
      Returns true if this immutable collection contains all of the elements in the specified immutable collection.
      Specified by:
      containsAll in interface ImmutableCollection<E>
      Parameters:
      c - ImmutableCollection<?>; immutable collection to be checked for containment in this immutable collection
      Returns:
      true if this immutable collection contains all of the elements in the specified immutable collection
      See Also:
      ImmutableCollection.contains(Object)
    • stream

      public final Stream<E> stream()
      Returns a sequential Stream with this collection as its source.

      This method should be overridden when the ImmutableCollection.spliterator() method cannot return a spliterator that is IMMUTABLE, CONCURRENT, or late-binding. (See ImmutableCollection.spliterator() for details.)

      Specified by:
      stream in interface ImmutableCollection<E>
      Returns:
      a sequential Stream over the elements in this collection
    • parallelStream

      public final Stream<E> parallelStream()
      Returns a possibly parallel Stream with this collection as its source. It is allowable for this method to return a sequential stream.

      This method should be overridden when the ImmutableCollection.spliterator() method cannot return a spliterator that is IMMUTABLE, CONCURRENT, or late-binding. (See ImmutableCollection.spliterator() for details.)

      Specified by:
      parallelStream in interface ImmutableCollection<E>
      Returns:
      a possibly parallel Stream over the elements in this collection
    • isWrap

      public final boolean isWrap()
      Return whether the internal storage is a wrapped pointer to the original collection. If true, this means that anyone holding a pointer to this data structure can still change it. The users of the ImmutableCollection itself can, however, not make any changes.
      Specified by:
      isWrap in interface ImmutableCollection<E>
      Returns:
      boolean; whether the internal storage is a wrapped pointer to the original collection
    • hashCode

      public int hashCode()
      Force to redefine hashCode for the implementations of immutable collection classes.
      Specified by:
      hashCode in interface ImmutableCollection<E>
      Specified by:
      hashCode in interface ImmutableList<E>
      Overrides:
      hashCode in class Object
      Returns:
      the calculated hashCode
    • equals

      public boolean equals​(Object obj)
      Force to redefine equals for the implementations of immutable collection classes.
      Specified by:
      equals in interface ImmutableCollection<E>
      Specified by:
      equals in interface ImmutableList<E>
      Overrides:
      equals in class Object
      Parameters:
      obj - Object; the object to compare this collection with
      Returns:
      whether the objects are equal