Package java.util

Class LinkedList<E>

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

public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Queue<E>, Cloneable, Serializable
LinkedList is an implementation of List, backed by a doubly-linked list. All optional operations including adding, removing, and replacing elements are supported.

All elements are permitted, including null.

This class is primarily useful if you need queue-like behavior. It may also be useful as a list if you expect your lists to contain zero or one element, but still require the ability to scale to slightly larger numbers of elements. In general, though, you should probably use ArrayList if you don't need the queue-like behavior.

Since:
1.2
See Also:
Serialized Form
  • Field Summary

    Fields inherited from class java.util.AbstractList

    modCount
  • Constructor Summary

    Constructors
    Constructor Description
    LinkedList()
    Constructs a new empty instance of LinkedList.
    LinkedList​(Collection<? extends E> collection)
    Constructs a new instance of LinkedList that holds all of the elements contained in the specified collection.
  • Method Summary

    Modifier and Type Method Description
    void add​(int location, E object)
    Inserts the specified object into this LinkedList at the specified location.
    boolean add​(E object)
    Adds the specified object at the end of this LinkedList.
    boolean addAll​(int location, Collection<? extends E> collection)
    Inserts the objects in the specified collection at the specified location in this LinkedList.
    boolean addAll​(Collection<? extends E> collection)
    Adds the objects in the specified Collection to this LinkedList.
    void addFirst​(E object)
    Adds the specified object at the beginning of this LinkedList.
    void addLast​(E object)
    Adds the specified object at the end of this LinkedList.
    void clear()
    Removes all elements from this LinkedList, leaving it empty.
    Object clone()
    Returns a new LinkedList with the same elements and size as this LinkedList.
    boolean contains​(Object object)
    Searches this LinkedList for the specified object.
    Iterator<E> descendingIterator()
    Returns an iterator over the elements in this deque in reverse sequential order.
    E element()
    Retrieves, but does not remove, the head of the queue represented by this deque (in other words, the first element of this deque).
    E get​(int location)
    Returns the element at the specified location in this list.
    E getFirst()
    Returns the first element in this LinkedList.
    E getLast()
    Returns the last element in this LinkedList.
    int indexOf​(Object object)
    Searches this list for the specified object and returns the index of the first occurrence.
    int lastIndexOf​(Object object)
    Searches this LinkedList for the specified object and returns the index of the last occurrence.
    ListIterator<E> listIterator​(int location)
    Returns a ListIterator on the elements of this LinkedList.
    boolean offer​(E o)
    Inserts the specified element into the queue represented by this deque (in other words, at the tail of this deque) if it is possible to do so immediately without violating capacity restrictions, returning true upon success and false if no space is currently available.
    boolean offerFirst​(E e)
    Inserts the specified element at the front of this deque unless it would violate capacity restrictions.
    boolean offerLast​(E e)
    Inserts the specified element at the end of this deque unless it would violate capacity restrictions.
    E peek()
    Retrieves, but does not remove, the head of the queue represented by this deque (in other words, the first element of this deque), or returns null if this deque is empty.
    E peekFirst()
    Retrieves, but does not remove, the first element of this deque, or returns null if this deque is empty.
    E peekLast()
    Retrieves, but does not remove, the last element of this deque, or returns null if this deque is empty.
    E poll()
    Retrieves and removes the head of the queue represented by this deque (in other words, the first element of this deque), or returns null if this deque is empty.
    E pollFirst()
    Retrieves and removes the first element of this deque, or returns null if this deque is empty.
    E pollLast()
    Retrieves and removes the last element of this deque, or returns null if this deque is empty.
    E pop()
    Pops an element from the stack represented by this deque.
    void push​(E e)
    Pushes an element onto the stack represented by this deque (in other words, at the head of this deque) if it is possible to do so immediately without violating capacity restrictions, returning true upon success and throwing an IllegalStateException if no space is currently available.
    E remove()
    Retrieves and removes the head of the queue represented by this deque (in other words, the first element of this deque).
    E remove​(int location)
    Removes the object at the specified location from this LinkedList.
    boolean remove​(Object object)
    Removes one instance of the specified object from this Collection if one is contained (optional).
    E removeFirst()
    Removes the first object from this LinkedList.
    boolean removeFirstOccurrence​(Object o)
    Removes the first occurrence of the specified element from this deque.
    E removeLast()
    Removes the last object from this LinkedList.
    boolean removeLastOccurrence​(Object o)
    Removes the last occurrence of the specified element from this deque.
    E set​(int location, E object)
    Replaces the element at the specified location in this LinkedList with the specified object.
    int size()
    Returns the number of elements in this LinkedList.
    Object[] toArray()
    Returns a new array containing all elements contained in this LinkedList.
    <T> T[] toArray​(T[] contents)
    Returns an array containing all elements contained in this LinkedList.

    Methods inherited from class java.util.AbstractSequentialList

    iterator

    Methods inherited from class java.util.AbstractList

    equals, hashCode, listIterator, removeRange, subList

    Methods inherited from class java.util.AbstractCollection

    containsAll, isEmpty, removeAll, retainAll, toString

    Methods inherited from class java.lang.Object

    finalize, getClass, notify, notifyAll, wait, wait, wait

    Methods inherited from interface java.util.Deque

    iterator

    Methods inherited from interface java.util.List

    containsAll, equals, hashCode, isEmpty, iterator, listIterator, removeAll, retainAll, subList
  • Constructor Details

    • LinkedList

      public LinkedList()
      Constructs a new empty instance of LinkedList.
    • LinkedList

      public LinkedList​(Collection<? extends E> collection)
      Constructs a new instance of LinkedList that holds all of the elements contained in the specified collection. The order of the elements in this new LinkedList will be determined by the iteration order of collection.
      Parameters:
      collection - the collection of elements to add.
  • Method Details

    • add

      public void add​(int location, E object)
      Inserts the specified object into this LinkedList at the specified location. The object is inserted before any previous element at the specified location. If the location is equal to the size of this LinkedList, the object is added at the end.
      Specified by:
      add in interface List<E>
      Overrides:
      add in class AbstractSequentialList<E>
      Parameters:
      location - the index at which to insert.
      object - the object to add.
      Throws:
      IndexOutOfBoundsException - if location < 0 || location > size()
    • add

      public boolean add​(E object)
      Adds the specified object at the end of this LinkedList.
      Specified by:
      add in interface Collection<E>
      Specified by:
      add in interface Deque<E>
      Specified by:
      add in interface List<E>
      Specified by:
      add in interface Queue<E>
      Overrides:
      add in class AbstractList<E>
      Parameters:
      object - the object to add.
      Returns:
      always true
    • addAll

      public boolean addAll​(int location, Collection<? extends E> collection)
      Inserts the objects in the specified collection at the specified location in this LinkedList. The objects are added in the order they are returned from the collection's iterator.
      Specified by:
      addAll in interface List<E>
      Overrides:
      addAll in class AbstractSequentialList<E>
      Parameters:
      location - the index at which to insert.
      collection - the collection of objects
      Returns:
      true if this LinkedList is modified, false otherwise.
      Throws:
      ClassCastException - if the class of an object is inappropriate for this list.
      IllegalArgumentException - if an object cannot be added to this list.
      IndexOutOfBoundsException - if location < 0 || location > size()
    • addAll

      public boolean addAll​(Collection<? extends E> collection)
      Adds the objects in the specified Collection to this LinkedList.
      Specified by:
      addAll in interface Collection<E>
      Specified by:
      addAll in interface List<E>
      Overrides:
      addAll in class AbstractCollection<E>
      Parameters:
      collection - the collection of objects.
      Returns:
      true if this LinkedList is modified, false otherwise.
    • addFirst

      public void addFirst​(E object)
      Adds the specified object at the beginning of this LinkedList.
      Specified by:
      addFirst in interface Deque<E>
      Parameters:
      object - the object to add.
    • addLast

      public void addLast​(E object)
      Adds the specified object at the end of this LinkedList.
      Specified by:
      addLast in interface Deque<E>
      Parameters:
      object - the object to add.
    • clear

      public void clear()
      Removes all elements from this LinkedList, leaving it empty.
      Specified by:
      clear in interface Collection<E>
      Specified by:
      clear in interface List<E>
      Overrides:
      clear in class AbstractList<E>
      See Also:
      List.isEmpty(), size
    • clone

      public Object clone()
      Returns a new LinkedList with the same elements and size as this LinkedList.
      Overrides:
      clone in class Object
      Returns:
      a shallow copy of this LinkedList.
      See Also:
      Cloneable
    • contains

      public boolean contains​(Object object)
      Searches this LinkedList for the specified object.
      Specified by:
      contains in interface Collection<E>
      Specified by:
      contains in interface Deque<E>
      Specified by:
      contains in interface List<E>
      Overrides:
      contains in class AbstractCollection<E>
      Parameters:
      object - the object to search for.
      Returns:
      true if object is an element of this LinkedList, false otherwise
    • get

      public E get​(int location)
      Description copied from class: AbstractList
      Returns the element at the specified location in this list.
      Specified by:
      get in interface List<E>
      Overrides:
      get in class AbstractSequentialList<E>
      Parameters:
      location - the index of the element to return.
      Returns:
      the element at the specified index.
    • getFirst

      public E getFirst()
      Returns the first element in this LinkedList.
      Specified by:
      getFirst in interface Deque<E>
      Returns:
      the first element.
      Throws:
      NoSuchElementException - if this LinkedList is empty.
    • getLast

      public E getLast()
      Returns the last element in this LinkedList.
      Specified by:
      getLast in interface Deque<E>
      Returns:
      the last element
      Throws:
      NoSuchElementException - if this LinkedList is empty
    • indexOf

      public int indexOf​(Object object)
      Description copied from class: AbstractList
      Searches this list for the specified object and returns the index of the first occurrence.
      Specified by:
      indexOf in interface List<E>
      Overrides:
      indexOf in class AbstractList<E>
      Parameters:
      object - the object to search for.
      Returns:
      the index of the first occurrence of the object, or -1 if it was not found.
    • lastIndexOf

      public int lastIndexOf​(Object object)
      Searches this LinkedList for the specified object and returns the index of the last occurrence.
      Specified by:
      lastIndexOf in interface List<E>
      Overrides:
      lastIndexOf in class AbstractList<E>
      Parameters:
      object - the object to search for
      Returns:
      the index of the last occurrence of the object, or -1 if it was not found.
    • listIterator

      public ListIterator<E> listIterator​(int location)
      Returns a ListIterator on the elements of this LinkedList. The elements are iterated in the same order that they occur in the LinkedList. The iteration starts at the specified location.
      Specified by:
      listIterator in interface List<E>
      Specified by:
      listIterator in class AbstractSequentialList<E>
      Parameters:
      location - the index at which to start the iteration
      Returns:
      a ListIterator on the elements of this LinkedList
      Throws:
      IndexOutOfBoundsException - if location < 0 || location > size()
      See Also:
      ListIterator
    • remove

      public E remove​(int location)
      Removes the object at the specified location from this LinkedList.
      Specified by:
      remove in interface List<E>
      Overrides:
      remove in class AbstractSequentialList<E>
      Parameters:
      location - the index of the object to remove
      Returns:
      the removed object
      Throws:
      IndexOutOfBoundsException - if location < 0 || location >= size()
    • remove

      public boolean remove​(Object object)
      Description copied from class: AbstractCollection
      Removes one instance of the specified object from this Collection if one is contained (optional). This implementation iterates over this Collection and tests for each element e returned by the iterator, whether e is equal to the given object. If object != null then this test is performed using object.equals(e), otherwise using object == null. If an element equal to the given object is found, then the remove method is called on the iterator and true is returned, false otherwise. If the iterator does not support removing elements, an UnsupportedOperationException is thrown.
      Specified by:
      remove in interface Collection<E>
      Specified by:
      remove in interface Deque<E>
      Specified by:
      remove in interface List<E>
      Overrides:
      remove in class AbstractCollection<E>
      Parameters:
      object - the object to remove.
      Returns:
      true if this Collection is modified, false otherwise.
    • removeFirst

      public E removeFirst()
      Removes the first object from this LinkedList.
      Specified by:
      removeFirst in interface Deque<E>
      Returns:
      the removed object.
      Throws:
      NoSuchElementException - if this LinkedList is empty.
    • removeLast

      public E removeLast()
      Removes the last object from this LinkedList.
      Specified by:
      removeLast in interface Deque<E>
      Returns:
      the removed object.
      Throws:
      NoSuchElementException - if this LinkedList is empty.
    • descendingIterator

      public Iterator<E> descendingIterator()
      Returns an iterator over the elements in this deque in reverse sequential order. The elements will be returned in order from last (tail) to first (head).
      Specified by:
      descendingIterator in interface Deque<E>
      Returns:
      an iterator over the elements in this deque in reverse sequence
      Since:
      1.6
      See Also:
      Deque.descendingIterator()
    • offerFirst

      public boolean offerFirst​(E e)
      Inserts the specified element at the front of this deque unless it would violate capacity restrictions. When using a capacity-restricted deque, this method is generally preferable to the Deque.addFirst(E) method, which can fail to insert an element only by throwing an exception.
      Specified by:
      offerFirst in interface Deque<E>
      Parameters:
      e - the element to add
      Returns:
      true if the element was added to this deque, else false
      Since:
      1.6
      See Also:
      Deque.offerFirst(java.lang.Object)
    • offerLast

      public boolean offerLast​(E e)
      Inserts the specified element at the end of this deque unless it would violate capacity restrictions. When using a capacity-restricted deque, this method is generally preferable to the Deque.addLast(E) method, which can fail to insert an element only by throwing an exception.
      Specified by:
      offerLast in interface Deque<E>
      Parameters:
      e - the element to add
      Returns:
      true if the element was added to this deque, else false
      Since:
      1.6
      See Also:
      Deque.offerLast(java.lang.Object)
    • peekFirst

      public E peekFirst()
      Retrieves, but does not remove, the first element of this deque, or returns null if this deque is empty.
      Specified by:
      peekFirst in interface Deque<E>
      Returns:
      the head of this deque, or null if this deque is empty
      Since:
      1.6
      See Also:
      Deque.peekFirst()
    • peekLast

      public E peekLast()
      Retrieves, but does not remove, the last element of this deque, or returns null if this deque is empty.
      Specified by:
      peekLast in interface Deque<E>
      Returns:
      the tail of this deque, or null if this deque is empty
      Since:
      1.6
      See Also:
      Deque.peekLast()
    • pollFirst

      public E pollFirst()
      Retrieves and removes the first element of this deque, or returns null if this deque is empty.
      Specified by:
      pollFirst in interface Deque<E>
      Returns:
      the head of this deque, or null if this deque is empty
      Since:
      1.6
      See Also:
      Deque.pollFirst()
    • pollLast

      public E pollLast()
      Retrieves and removes the last element of this deque, or returns null if this deque is empty.
      Specified by:
      pollLast in interface Deque<E>
      Returns:
      the tail of this deque, or null if this deque is empty
      Since:
      1.6
      See Also:
      Deque.pollLast()
    • pop

      public E pop()
      Pops an element from the stack represented by this deque. In other words, removes and returns the first element of this deque.

      This method is equivalent to Deque.removeFirst().

      Specified by:
      pop in interface Deque<E>
      Returns:
      the element at the front of this deque (which is the top of the stack represented by this deque)
      Since:
      1.6
      See Also:
      Deque.pop()
    • push

      public void push​(E e)
      Pushes an element onto the stack represented by this deque (in other words, at the head of this deque) if it is possible to do so immediately without violating capacity restrictions, returning true upon success and throwing an IllegalStateException if no space is currently available.

      This method is equivalent to Deque.addFirst(E).

      Specified by:
      push in interface Deque<E>
      Parameters:
      e - the element to push
      Since:
      1.6
      See Also:
      Deque.push(java.lang.Object)
    • removeFirstOccurrence

      public boolean removeFirstOccurrence​(Object o)
      Removes the first occurrence of the specified element from this deque. If the deque does not contain the element, it is unchanged. More formally, removes the first element e such that (o==null ? e==null : o.equals(e)) (if such an element exists). Returns true if this deque contained the specified element (or equivalently, if this deque changed as a result of the call).
      Specified by:
      removeFirstOccurrence in interface Deque<E>
      Parameters:
      o - element to be removed from this deque, if present
      Returns:
      true if an element was removed as a result of this call
      Since:
      1.6
      See Also:
      Deque.removeFirstOccurrence(java.lang.Object)
    • removeLastOccurrence

      public boolean removeLastOccurrence​(Object o)
      Removes the last occurrence of the specified element from this deque. If the deque does not contain the element, it is unchanged. More formally, removes the last element e such that (o==null ? e==null : o.equals(e)) (if such an element exists). Returns true if this deque contained the specified element (or equivalently, if this deque changed as a result of the call).
      Specified by:
      removeLastOccurrence in interface Deque<E>
      Parameters:
      o - element to be removed from this deque, if present
      Returns:
      true if an element was removed as a result of this call
      Since:
      1.6
      See Also:
      Deque.removeLastOccurrence(java.lang.Object)
    • set

      public E set​(int location, E object)
      Replaces the element at the specified location in this LinkedList with the specified object.
      Specified by:
      set in interface List<E>
      Overrides:
      set in class AbstractSequentialList<E>
      Parameters:
      location - the index at which to put the specified object.
      object - the object to add.
      Returns:
      the previous element at the index.
      Throws:
      ClassCastException - if the class of an object is inappropriate for this list.
      IllegalArgumentException - if an object cannot be added to this list.
      IndexOutOfBoundsException - if location < 0 || location >= size()
    • size

      public int size()
      Returns the number of elements in this LinkedList.
      Specified by:
      size in interface Collection<E>
      Specified by:
      size in interface Deque<E>
      Specified by:
      size in interface List<E>
      Specified by:
      size in class AbstractCollection<E>
      Returns:
      the number of elements in this LinkedList.
    • offer

      public boolean offer​(E o)
      Description copied from interface: Deque
      Inserts the specified element into the queue represented by this deque (in other words, at the tail of this deque) if it is possible to do so immediately without violating capacity restrictions, returning true upon success and false if no space is currently available. When using a capacity-restricted deque, this method is generally preferable to the Deque.add(E) method, which can fail to insert an element only by throwing an exception.

      This method is equivalent to Deque.offerLast(E).

      Specified by:
      offer in interface Deque<E>
      Specified by:
      offer in interface Queue<E>
      Parameters:
      o - the element to add
      Returns:
      true if the element was added to this deque, else false
    • poll

      public E poll()
      Description copied from interface: Deque
      Retrieves and removes the head of the queue represented by this deque (in other words, the first element of this deque), or returns null if this deque is empty.

      This method is equivalent to Deque.pollFirst().

      Specified by:
      poll in interface Deque<E>
      Specified by:
      poll in interface Queue<E>
      Returns:
      the first element of this deque, or null if this deque is empty
    • remove

      public E remove()
      Description copied from interface: Deque
      Retrieves and removes the head of the queue represented by this deque (in other words, the first element of this deque). This method differs from poll only in that it throws an exception if this deque is empty.

      This method is equivalent to Deque.removeFirst().

      Specified by:
      remove in interface Deque<E>
      Specified by:
      remove in interface Queue<E>
      Returns:
      the head of the queue represented by this deque
    • peek

      public E peek()
      Description copied from interface: Deque
      Retrieves, but does not remove, the head of the queue represented by this deque (in other words, the first element of this deque), or returns null if this deque is empty.

      This method is equivalent to Deque.peekFirst().

      Specified by:
      peek in interface Deque<E>
      Specified by:
      peek in interface Queue<E>
      Returns:
      the head of the queue represented by this deque, or null if this deque is empty
    • element

      public E element()
      Description copied from interface: Deque
      Retrieves, but does not remove, the head of the queue represented by this deque (in other words, the first element of this deque). This method differs from peek only in that it throws an exception if this deque is empty.

      This method is equivalent to Deque.getFirst().

      Specified by:
      element in interface Deque<E>
      Specified by:
      element in interface Queue<E>
      Returns:
      the head of the queue represented by this deque
    • toArray

      public Object[] toArray()
      Returns a new array containing all elements contained in this LinkedList.
      Specified by:
      toArray in interface Collection<E>
      Specified by:
      toArray in interface List<E>
      Overrides:
      toArray in class AbstractCollection<E>
      Returns:
      an array of the elements from this LinkedList.
    • toArray

      public <T> T[] toArray​(T[] contents)
      Returns an array containing all elements contained in this LinkedList. If the specified array is large enough to hold the elements, the specified array is used, otherwise an array of the same type is created. If the specified array is used and is larger than this LinkedList, the array element following the collection elements is set to null.
      Specified by:
      toArray in interface Collection<E>
      Specified by:
      toArray in interface List<E>
      Overrides:
      toArray in class AbstractCollection<E>
      Parameters:
      contents - the array.
      Returns:
      an array of the elements from this LinkedList.
      Throws:
      ArrayStoreException - if the type of an element in this LinkedList cannot be stored in the type of the specified array.