Class SetUniqueList

All Implemented Interfaces:
Serializable, Iterable, Collection, List

public class SetUniqueList extends AbstractSerializableListDecorator
Decorates a List to ensure that no duplicates are present much like a Set.

The List interface makes certain assumptions/requirements. This implementation breaks these in certain ways, but this is merely the result of rejecting duplicates. Each violation is explained in the method, but it should not affect you. Bear in mind that Sets require immutable objects to function correctly.

The ListOrderedSet class provides an alternative approach, by wrapping an existing Set and retaining insertion order in the iterator.

This class is Serializable from Commons Collections 3.1.

Since:
Commons Collections 3.0
Version:
$Revision: 1713299 $ $Date: 2015-11-08 22:35:53 +0100 (Sun, 08 Nov 2015) $
Author:
Matthew Hawthorne, Stephen Colebourne, Tom Dunham
See Also:
  • Field Details

    • set

      protected final Set set
      Internal Set to maintain uniqueness.
  • Constructor Details

    • SetUniqueList

      protected SetUniqueList(List list, Set set)
      Constructor that wraps (not copies) the List and specifies the set to use.

      The set and list must both be correctly initialised to the same elements.

      Parameters:
      set - the set to decorate, must not be null
      list - the list to decorate, must not be null
      Throws:
      IllegalArgumentException - if set or list is null
  • Method Details

    • decorate

      public static SetUniqueList decorate(List list)
      Factory method to create a SetList using the supplied list to retain order.

      If the list contains duplicates, these are removed (first indexed one kept). A HashSet is used for the set behaviour.

      Parameters:
      list - the list to decorate, must not be null
      Throws:
      IllegalArgumentException - if list is null
    • asSet

      public Set asSet()
      Gets an unmodifiable view as a Set.
      Returns:
      an unmodifiable set view
    • add

      public boolean add(Object object)
      Adds an element to the list if it is not already present.

      (Violation) The List interface requires that this method returns true always. However this class may return false because of the Set behaviour.

      Specified by:
      add in interface Collection
      Specified by:
      add in interface List
      Overrides:
      add in class AbstractCollectionDecorator
      Parameters:
      object - the object to add
      Returns:
      true if object was added
    • add

      public void add(int index, Object object)
      Adds an element to a specific index in the list if it is not already present.

      (Violation) The List interface makes the assumption that the element is always inserted. This may not happen with this implementation.

      Specified by:
      add in interface List
      Overrides:
      add in class AbstractListDecorator
      Parameters:
      index - the index to insert at
      object - the object to add
    • addAll

      public boolean addAll(Collection coll)
      Adds an element to the end of the list if it is not already present.

      (Violation) The List interface makes the assumption that the element is always inserted. This may not happen with this implementation.

      Specified by:
      addAll in interface Collection
      Specified by:
      addAll in interface List
      Overrides:
      addAll in class AbstractCollectionDecorator
      Parameters:
      coll - the collection to add
    • addAll

      public boolean addAll(int index, Collection coll)
      Adds a collection of objects a specific index in the list avoiding duplicates.

      Only elements that are not already in this list will be added, and duplicates from the specified collection will be ignored.

      (Violation) The List interface makes the assumption that the elements are always inserted. This may not happen with this implementation.

      Specified by:
      addAll in interface List
      Overrides:
      addAll in class AbstractListDecorator
      Parameters:
      index - the index to insert at
      coll - the collection to add in iterator order
      Returns:
      true if this collection changed
    • set

      public Object set(int index, Object object)
      Sets the value at the specified index avoiding duplicates.

      The object is set into the specified index. Afterwards, any previous duplicate is removed If the object is not already in the list then a normal set occurs. If it is present, then the old version is removed.

      Specified by:
      set in interface List
      Overrides:
      set in class AbstractListDecorator
      Parameters:
      index - the index to insert at
      object - the object to set
      Returns:
      the previous object
    • remove

      public boolean remove(Object object)
      Specified by:
      remove in interface Collection
      Specified by:
      remove in interface List
      Overrides:
      remove in class AbstractCollectionDecorator
    • remove

      public Object remove(int index)
      Specified by:
      remove in interface List
      Overrides:
      remove in class AbstractListDecorator
    • removeAll

      public boolean removeAll(Collection coll)
      Specified by:
      removeAll in interface Collection
      Specified by:
      removeAll in interface List
      Overrides:
      removeAll in class AbstractCollectionDecorator
    • retainAll

      public boolean retainAll(Collection coll)
      Specified by:
      retainAll in interface Collection
      Specified by:
      retainAll in interface List
      Overrides:
      retainAll in class AbstractCollectionDecorator
    • clear

      public void clear()
      Specified by:
      clear in interface Collection
      Specified by:
      clear in interface List
      Overrides:
      clear in class AbstractCollectionDecorator
    • contains

      public boolean contains(Object object)
      Specified by:
      contains in interface Collection
      Specified by:
      contains in interface List
      Overrides:
      contains in class AbstractCollectionDecorator
    • containsAll

      public boolean containsAll(Collection coll)
      Specified by:
      containsAll in interface Collection
      Specified by:
      containsAll in interface List
      Overrides:
      containsAll in class AbstractCollectionDecorator
    • iterator

      public Iterator iterator()
      Specified by:
      iterator in interface Collection
      Specified by:
      iterator in interface Iterable
      Specified by:
      iterator in interface List
      Overrides:
      iterator in class AbstractCollectionDecorator
    • listIterator

      public ListIterator listIterator()
      Specified by:
      listIterator in interface List
      Overrides:
      listIterator in class AbstractListDecorator
    • listIterator

      public ListIterator listIterator(int index)
      Specified by:
      listIterator in interface List
      Overrides:
      listIterator in class AbstractListDecorator
    • subList

      public List subList(int fromIndex, int toIndex)
      Specified by:
      subList in interface List
      Overrides:
      subList in class AbstractListDecorator
    • createSetBasedOnList

      protected Set createSetBasedOnList(Set set, List list)
      Create a new Set with the same type as the provided set and populate it with all elements of list.
      Parameters:
      set - the Set to be used as return type, must not be null
      list - the List to populate the Set
      Returns:
      a new Set populated with all elements of the provided List