Class TreeList<E>

  • All Implemented Interfaces:
    java.lang.Iterable<E>, java.util.Collection<E>, java.util.List<E>

    public class TreeList<E>
    extends java.util.AbstractList<E>
    A List implementation that is optimised for fast insertions and removals at any index in the list.

    This list implementation utilises a tree structure internally to ensure that all insertions and removals are O(log n). This provides much faster performance than both an ArrayList and a LinkedList where elements are inserted and removed repeatedly from anywhere in the list.

    The following relative performance statistics are indicative of this class:

                  get  add  insert  iterate  remove
     TreeList       3    5       1       2       1
     ArrayList      1    1      40       1      40
     LinkedList  5800    1     350       2     325
     

    ArrayList is a good general purpose list implementation. It is faster than TreeList for most operations except inserting and removing in the middle of the list. ArrayList also uses less memory as TreeList uses one object per entry.

    LinkedList is rarely a good choice of implementation. TreeList is almost always a good replacement for it, although it does use slightly more memory.

    Since:
    3.1
    • Constructor Summary

      Constructors 
      Constructor Description
      TreeList()
      Constructs a new empty list.
      TreeList​(java.util.Collection<? extends E> coll)
      Constructs a new empty list that copies the specified collection.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void add​(int index, E obj)
      Adds a new element to the list.
      boolean addAll​(java.util.Collection<? extends E> c)
      Appends all of the elements in the specified collection to the end of this list, in the order that they are returned by the specified collection's Iterator.
      void clear()
      Clears the list, removing all entries.
      boolean contains​(java.lang.Object object)
      Searches for the presence of an object in the list.
      E get​(int index)
      Gets the element at the specified index.
      int indexOf​(java.lang.Object object)
      Searches for the index of an object in the list.
      java.util.Iterator<E> iterator()
      Gets an iterator over the list.
      java.util.ListIterator<E> listIterator()
      Gets a ListIterator over the list.
      java.util.ListIterator<E> listIterator​(int fromIndex)
      Gets a ListIterator over the list.
      E remove​(int index)
      Removes the element at the specified index.
      E set​(int index, E obj)
      Sets the element at the specified index.
      int size()
      Gets the current size of the list.
      java.lang.Object[] toArray()
      Converts the list into an array.
      • Methods inherited from class java.util.AbstractList

        add, addAll, equals, hashCode, lastIndexOf, subList
      • Methods inherited from class java.util.AbstractCollection

        containsAll, isEmpty, remove, removeAll, retainAll, toArray, toString
      • Methods inherited from class java.lang.Object

        getClass, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface java.util.Collection

        parallelStream, removeIf, stream, toArray
      • Methods inherited from interface java.lang.Iterable

        forEach
      • Methods inherited from interface java.util.List

        containsAll, isEmpty, remove, removeAll, replaceAll, retainAll, sort, spliterator, toArray
    • Constructor Detail

      • TreeList

        public TreeList()
        Constructs a new empty list.
      • TreeList

        public TreeList​(java.util.Collection<? extends E> coll)
        Constructs a new empty list that copies the specified collection.
        Parameters:
        coll - the collection to copy
        Throws:
        java.lang.NullPointerException - if the collection is null
    • Method Detail

      • get

        public E get​(int index)
        Gets the element at the specified index.
        Specified by:
        get in interface java.util.List<E>
        Specified by:
        get in class java.util.AbstractList<E>
        Parameters:
        index - the index to retrieve
        Returns:
        the element at the specified index
      • size

        public int size()
        Gets the current size of the list.
        Specified by:
        size in interface java.util.Collection<E>
        Specified by:
        size in interface java.util.List<E>
        Specified by:
        size in class java.util.AbstractCollection<E>
        Returns:
        the current size
      • iterator

        public java.util.Iterator<E> iterator()
        Gets an iterator over the list.
        Specified by:
        iterator in interface java.util.Collection<E>
        Specified by:
        iterator in interface java.lang.Iterable<E>
        Specified by:
        iterator in interface java.util.List<E>
        Overrides:
        iterator in class java.util.AbstractList<E>
        Returns:
        an iterator over the list
      • listIterator

        public java.util.ListIterator<E> listIterator()
        Gets a ListIterator over the list.
        Specified by:
        listIterator in interface java.util.List<E>
        Overrides:
        listIterator in class java.util.AbstractList<E>
        Returns:
        the new iterator
      • listIterator

        public java.util.ListIterator<E> listIterator​(int fromIndex)
        Gets a ListIterator over the list.
        Specified by:
        listIterator in interface java.util.List<E>
        Overrides:
        listIterator in class java.util.AbstractList<E>
        Parameters:
        fromIndex - the index to start from
        Returns:
        the new iterator
      • indexOf

        public int indexOf​(java.lang.Object object)
        Searches for the index of an object in the list.
        Specified by:
        indexOf in interface java.util.List<E>
        Overrides:
        indexOf in class java.util.AbstractList<E>
        Parameters:
        object - the object to search
        Returns:
        the index of the object, -1 if not found
      • contains

        public boolean contains​(java.lang.Object object)
        Searches for the presence of an object in the list.
        Specified by:
        contains in interface java.util.Collection<E>
        Specified by:
        contains in interface java.util.List<E>
        Overrides:
        contains in class java.util.AbstractCollection<E>
        Parameters:
        object - the object to check
        Returns:
        true if the object is found
      • toArray

        public java.lang.Object[] toArray()
        Converts the list into an array.
        Specified by:
        toArray in interface java.util.Collection<E>
        Specified by:
        toArray in interface java.util.List<E>
        Overrides:
        toArray in class java.util.AbstractCollection<E>
        Returns:
        the list as an array
      • add

        public void add​(int index,
                        E obj)
        Adds a new element to the list.
        Specified by:
        add in interface java.util.List<E>
        Overrides:
        add in class java.util.AbstractList<E>
        Parameters:
        index - the index to add before
        obj - the element to add
      • addAll

        public boolean addAll​(java.util.Collection<? extends E> c)
        Appends all of the elements in the specified collection to the end of this list, in the order that they are returned by the specified collection's Iterator.

        This method runs in O(n + log m) time, where m is the size of this list and n is the size of c.

        Specified by:
        addAll in interface java.util.Collection<E>
        Specified by:
        addAll in interface java.util.List<E>
        Overrides:
        addAll in class java.util.AbstractCollection<E>
        Parameters:
        c - the collection to be added to this list
        Returns:
        true if this list changed as a result of the call
        Throws:
        java.lang.NullPointerException
      • set

        public E set​(int index,
                     E obj)
        Sets the element at the specified index.
        Specified by:
        set in interface java.util.List<E>
        Overrides:
        set in class java.util.AbstractList<E>
        Parameters:
        index - the index to set
        obj - the object to store at the specified index
        Returns:
        the previous object at that index
        Throws:
        java.lang.IndexOutOfBoundsException - if the index is invalid
      • remove

        public E remove​(int index)
        Removes the element at the specified index.
        Specified by:
        remove in interface java.util.List<E>
        Overrides:
        remove in class java.util.AbstractList<E>
        Parameters:
        index - the index to remove
        Returns:
        the previous object at that index
      • clear

        public void clear()
        Clears the list, removing all entries.
        Specified by:
        clear in interface java.util.Collection<E>
        Specified by:
        clear in interface java.util.List<E>
        Overrides:
        clear in class java.util.AbstractList<E>