Class SetUniqueList<E>
- java.lang.Object
-
- org.apache.commons.collections4.collection.AbstractCollectionDecorator<E>
-
- org.apache.commons.collections4.list.AbstractListDecorator<E>
-
- org.apache.commons.collections4.list.AbstractSerializableListDecorator<E>
-
- org.apache.commons.collections4.list.SetUniqueList<E>
-
- All Implemented Interfaces:
java.io.Serializable
,java.lang.Iterable<E>
,java.util.Collection<E>
,java.util.List<E>
public class SetUniqueList<E> extends AbstractSerializableListDecorator<E>
Decorates aList
to ensure that no duplicates are present much like aSet
.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:
- 3.0
- Version:
- $Id: SetUniqueList.java 1686855 2015-06-22 13:00:27Z tn $
- See Also:
- Serialized Form
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
SetUniqueList(java.util.List<E> list, java.util.Set<E> set)
Constructor that wraps (not copies) the List and specifies the set to use.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
add(int index, E object)
Adds an element to a specific index in the list if it is not already present.boolean
add(E object)
Adds an element to the list if it is not already present.boolean
addAll(int index, java.util.Collection<? extends E> coll)
Adds a collection of objects a specific index in the list avoiding duplicates.boolean
addAll(java.util.Collection<? extends E> coll)
Adds a collection of objects to the end of the list avoiding duplicates.java.util.Set<E>
asSet()
Gets an unmodifiable view as a Set.void
clear()
boolean
contains(java.lang.Object object)
boolean
containsAll(java.util.Collection<?> coll)
protected java.util.Set<E>
createSetBasedOnList(java.util.Set<E> set, java.util.List<E> list)
Create a newSet
with the same type as the providedset
and populate it with all elements oflist
.java.util.Iterator<E>
iterator()
java.util.ListIterator<E>
listIterator()
java.util.ListIterator<E>
listIterator(int index)
E
remove(int index)
boolean
remove(java.lang.Object object)
boolean
removeAll(java.util.Collection<?> coll)
boolean
retainAll(java.util.Collection<?> coll)
E
set(int index, E object)
Sets the value at the specified index avoiding duplicates.static <E> SetUniqueList<E>
setUniqueList(java.util.List<E> list)
Factory method to create a SetList using the supplied list to retain order.java.util.List<E>
subList(int fromIndex, int toIndex)
-
Methods inherited from class org.apache.commons.collections4.list.AbstractListDecorator
decorated, equals, get, hashCode, indexOf, lastIndexOf
-
Methods inherited from class org.apache.commons.collections4.collection.AbstractCollectionDecorator
isEmpty, setCollection, size, toArray, toArray, toString
-
-
-
-
Constructor Detail
-
SetUniqueList
protected SetUniqueList(java.util.List<E> list, java.util.Set<E> 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 nulllist
- the list to decorate, must not be null- Throws:
java.lang.NullPointerException
- if set or list is null
-
-
Method Detail
-
setUniqueList
public static <E> SetUniqueList<E> setUniqueList(java.util.List<E> 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.- Type Parameters:
E
- the element type- Parameters:
list
- the list to decorate, must not be null- Returns:
- a new
SetUniqueList
- Throws:
java.lang.NullPointerException
- if list is null- Since:
- 4.0
-
asSet
public java.util.Set<E> asSet()
Gets an unmodifiable view as a Set.- Returns:
- an unmodifiable set view
-
add
public boolean add(E object)
Adds an element to the list if it is not already present.(Violation) The
List
interface requires that this method returnstrue
always. However this class may returnfalse
because of theSet
behaviour.- Specified by:
add
in interfacejava.util.Collection<E>
- Specified by:
add
in interfacejava.util.List<E>
- Overrides:
add
in classAbstractCollectionDecorator<E>
- Parameters:
object
- the object to add- Returns:
- true if object was added
-
add
public void add(int index, E 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 interfacejava.util.List<E>
- Overrides:
add
in classAbstractListDecorator<E>
- Parameters:
index
- the index to insert atobject
- the object to add
-
addAll
public boolean addAll(java.util.Collection<? extends E> coll)
Adds a collection of objects to the end of 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 interfacejava.util.Collection<E>
- Specified by:
addAll
in interfacejava.util.List<E>
- Overrides:
addAll
in classAbstractCollectionDecorator<E>
- Parameters:
coll
- the collection to add in iterator order- Returns:
- true if this collection changed
-
addAll
public boolean addAll(int index, java.util.Collection<? extends E> 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 interfacejava.util.List<E>
- Overrides:
addAll
in classAbstractListDecorator<E>
- Parameters:
index
- the index to insert atcoll
- the collection to add in iterator order- Returns:
- true if this collection changed
-
set
public E set(int index, E 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 interfacejava.util.List<E>
- Overrides:
set
in classAbstractListDecorator<E>
- Parameters:
index
- the index to insert atobject
- the object to set- Returns:
- the previous object
-
remove
public boolean remove(java.lang.Object object)
- Specified by:
remove
in interfacejava.util.Collection<E>
- Specified by:
remove
in interfacejava.util.List<E>
- Overrides:
remove
in classAbstractCollectionDecorator<E>
-
remove
public E remove(int index)
- Specified by:
remove
in interfacejava.util.List<E>
- Overrides:
remove
in classAbstractListDecorator<E>
-
removeAll
public boolean removeAll(java.util.Collection<?> coll)
- Specified by:
removeAll
in interfacejava.util.Collection<E>
- Specified by:
removeAll
in interfacejava.util.List<E>
- Overrides:
removeAll
in classAbstractCollectionDecorator<E>
-
retainAll
public boolean retainAll(java.util.Collection<?> coll)
This implementation iterates over the elements of this list, checking each element in turn to see if it's contained in
coll
. If it's not contained, it's removed from this list. As a consequence, it is advised to use a collection type forcoll
that provides a fast (e.g. O(1)) implementation ofCollection.contains(Object)
.- Specified by:
retainAll
in interfacejava.util.Collection<E>
- Specified by:
retainAll
in interfacejava.util.List<E>
- Overrides:
retainAll
in classAbstractCollectionDecorator<E>
-
clear
public void clear()
- Specified by:
clear
in interfacejava.util.Collection<E>
- Specified by:
clear
in interfacejava.util.List<E>
- Overrides:
clear
in classAbstractCollectionDecorator<E>
-
contains
public boolean contains(java.lang.Object object)
- Specified by:
contains
in interfacejava.util.Collection<E>
- Specified by:
contains
in interfacejava.util.List<E>
- Overrides:
contains
in classAbstractCollectionDecorator<E>
-
containsAll
public boolean containsAll(java.util.Collection<?> coll)
- Specified by:
containsAll
in interfacejava.util.Collection<E>
- Specified by:
containsAll
in interfacejava.util.List<E>
- Overrides:
containsAll
in classAbstractCollectionDecorator<E>
-
iterator
public java.util.Iterator<E> iterator()
-
listIterator
public java.util.ListIterator<E> listIterator()
- Specified by:
listIterator
in interfacejava.util.List<E>
- Overrides:
listIterator
in classAbstractListDecorator<E>
-
listIterator
public java.util.ListIterator<E> listIterator(int index)
- Specified by:
listIterator
in interfacejava.util.List<E>
- Overrides:
listIterator
in classAbstractListDecorator<E>
-
subList
public java.util.List<E> subList(int fromIndex, int toIndex)
NOTE: from 4.0, an unmodifiable list will be returned, as changes to the subList can invalidate the parent list.
- Specified by:
subList
in interfacejava.util.List<E>
- Overrides:
subList
in classAbstractListDecorator<E>
-
createSetBasedOnList
protected java.util.Set<E> createSetBasedOnList(java.util.Set<E> set, java.util.List<E> list)
Create a newSet
with the same type as the providedset
and populate it with all elements oflist
.- Parameters:
set
- theSet
to be used as return type, must not be nulllist
- theList
to populate theSet
- Returns:
- a new
Set
populated with all elements of the providedList
-
-