Class UnorderedCollection<E>
- java.lang.Object
-
- java.util.AbstractCollection<E>
-
- net.automatalib.common.smartcollection.AbstractSmartCollection<E>
-
- net.automatalib.common.smartcollection.UnorderedCollection<E>
-
- Type Parameters:
E- element class.
- All Implemented Interfaces:
Iterable<E>,Collection<E>,CapacityManagement,SmartCollection<E>
public final class UnorderedCollection<E> extends AbstractSmartCollection<E> implements CapacityManagement
This class implements a collection for storing objects in no particular order.It supports (amortized) constant time insertion and removal. Removal does not invalidate the references of other objects, and can be performed during iteration (using the respective
Iterator.remove()method).
-
-
Constructor Summary
Constructors Constructor Description UnorderedCollection()Default constructor.UnorderedCollection(int initialCapacity)Constructor.UnorderedCollection(Collection<? extends E> coll)Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanaddAll(Collection<? extends E> coll)<T extends E>
voidaddAll(T[] array)Adds all elements from the specified array.Echoose()Retrieves an arbitrary element from the collection.ElementReferencechooseRef()Retrieves the reference to an arbitrary element from the collection.voidclear()voiddeepClear()Thoroughly clears the collection, fixing all issues that may have been caused by a call of the aboveSmartCollection.quickClear().booleanensureAdditionalCapacity(int additionalSpace)Ensures that the internal storage has room for at least the provided number of additional elements.booleanensureCapacity(int minCapacity)Ensures that the internal storage has room for at least the provided number of elements.Eget(ElementReference ref)Retrieves an element by its reference.voidhintNextCapacity(int nextCapacityHint)Gives a hint regarding the capacity that should be reserved when resizing the internal storage for the next time.booleanisEmpty()Iterator<E>iterator()voidquickClear()Quickly clears this collection.ElementReferencereferencedAdd(E elem)Adds an element to the collection, returning a reference to the newly added element.Iterator<ElementReference>referenceIterator()Retrieves an iterator for iterating over the references of elements in this collection.Iterable<ElementReference>references()This is a method provided for convenience, which allows iterating over the element references using a foreach-stylefor-loop.voidremove(ElementReference ref)Removes an element (by its reference) from the collection.voidreplace(ElementReference ref, E newElement)Replaces the element referenced by the given reference with the specified element.intsize()voidswap(UnorderedCollection<E> other)Swaps the contents of thisUnorderedCollectionwith another one storing the same elements.-
Methods inherited from class net.automatalib.common.smartcollection.AbstractSmartCollection
add, addAll, find, remove
-
Methods inherited from class java.util.AbstractCollection
contains, containsAll, removeAll, retainAll, toArray, toArray, toString
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface java.util.Collection
contains, containsAll, equals, hashCode, parallelStream, removeAll, removeIf, retainAll, spliterator, stream, toArray, toArray, toArray
-
-
-
-
Constructor Detail
-
UnorderedCollection
public UnorderedCollection()
Default constructor. Reserves capacity for 10 elements.
-
UnorderedCollection
public UnorderedCollection(int initialCapacity)
Constructor. Reserves the specified initial capacity.- Parameters:
initialCapacity- the number of elements to reserve capacity for.
-
UnorderedCollection
public UnorderedCollection(Collection<? extends E> coll)
Constructor. Initializes the collection with the contents of the specified collection.- Parameters:
coll- the collection.
-
-
Method Detail
-
ensureCapacity
public boolean ensureCapacity(@UnknownInitialization(UnorderedCollection.class) UnorderedCollection<E> this, int minCapacity)
Description copied from interface:CapacityManagementEnsures that the internal storage has room for at least the provided number of elements.- Specified by:
ensureCapacityin interfaceCapacityManagement- Parameters:
minCapacity- the minimal number of elements the storage should have room for.- Returns:
trueiff the internal storage had to be resized,falseotherwise.
-
ensureAdditionalCapacity
public boolean ensureAdditionalCapacity(int additionalSpace)
Description copied from interface:CapacityManagementEnsures that the internal storage has room for at least the provided number of additional elements.Calling this method is equivalent to calling the above
CapacityManagement.ensureCapacity(int)with an argument ofsize() + additionalCapacity.- Specified by:
ensureAdditionalCapacityin interfaceCapacityManagement- Parameters:
additionalSpace- the number of additional elements the storage should have room for.- Returns:
trueiff the internal storage had to be resized,falseotherwise.
-
hintNextCapacity
public void hintNextCapacity(int nextCapacityHint)
Description copied from interface:CapacityManagementGives a hint regarding the capacity that should be reserved when resizing the internal storage for the next time. This method acts like a "lazy"CapacityManagement.ensureCapacity(int), i.e. it reserves the specified capacity at the time the next resizing of the internal storage is performed.This method is useful when a not too imprecise upper bound on the elements that will in consequence be added is known. Since the actual number of elements added may be lower than the specified upper bound, a resizing that would have been performed by
CapacityManagement.ensureCapacity(int)might not be necessary.- Specified by:
hintNextCapacityin interfaceCapacityManagement- Parameters:
nextCapacityHint- the next capacity hint.
-
get
public E get(ElementReference ref)
Description copied from interface:SmartCollectionRetrieves an element by its reference.If the reference belongs to another collection, the behavior is undefined.
- Specified by:
getin interfaceSmartCollection<E>- Parameters:
ref- the element's reference.- Returns:
- the element.
-
referencedAdd
public ElementReference referencedAdd(E elem)
Description copied from interface:SmartCollectionAdds an element to the collection, returning a reference to the newly added element. If the collection does not support containing the same element multiple times, a reference to the previously existing element is returned.- Specified by:
referencedAddin interfaceSmartCollection<E>- Parameters:
elem- the element to be added.- Returns:
- a reference to this element in the collection.
-
remove
public void remove(ElementReference ref)
Description copied from interface:SmartCollectionRemoves an element (by its reference) from the collection.If the reference does not belong to this collection, the behavior is undefined.
- Specified by:
removein interfaceSmartCollection<E>- Parameters:
ref- the reference to the element to be removed.
-
referenceIterator
public Iterator<ElementReference> referenceIterator()
Description copied from interface:SmartCollectionRetrieves an iterator for iterating over the references of elements in this collection.- Specified by:
referenceIteratorin interfaceSmartCollection<E>- Returns:
- the reference iterator.
-
replace
public void replace(ElementReference ref, E newElement)
Description copied from interface:SmartCollectionReplaces the element referenced by the given reference with the specified element.- Specified by:
replacein interfaceSmartCollection<E>- Parameters:
ref- the reference of the element to be replaced.newElement- the replacement.
-
choose
public E choose()
Description copied from interface:SmartCollectionRetrieves an arbitrary element from the collection.- Specified by:
choosein interfaceSmartCollection<E>- Overrides:
choosein classAbstractSmartCollection<E>- Returns:
- an arbitrary element from the collection
-
chooseRef
public ElementReference chooseRef()
Description copied from interface:SmartCollectionRetrieves the reference to an arbitrary element from the collection. If the collection is empty, aNoSuchElementExceptionis thrown.- Specified by:
chooseRefin interfaceSmartCollection<E>- Overrides:
chooseRefin classAbstractSmartCollection<E>- Returns:
- the reference to an arbitrary element in the collection
-
references
public Iterable<ElementReference> references()
Description copied from interface:SmartCollectionThis is a method provided for convenience, which allows iterating over the element references using a foreach-stylefor-loop.- Specified by:
referencesin interfaceSmartCollection<E>- Overrides:
referencesin classAbstractSmartCollection<E>- Returns:
- an
Iterablewith the aboveSmartCollection.referenceIterator()as its iterator.
-
addAll
public <T extends E> void addAll(T[] array)
Description copied from interface:SmartCollectionAdds all elements from the specified array.- Specified by:
addAllin interfaceSmartCollection<E>- Overrides:
addAllin classAbstractSmartCollection<E>- Type Parameters:
T- array element class, may be a subclass ofE.- Parameters:
array- the array of elements to be added.
-
addAll
public boolean addAll(@UnknownInitialization(UnorderedCollection.class) UnorderedCollection<E> this, Collection<? extends E> coll)
- Specified by:
addAllin interfaceCollection<E>- Overrides:
addAllin classAbstractCollection<E>
-
quickClear
public void quickClear()
Description copied from interface:SmartCollectionQuickly clears this collection. This method is supposed to perform the minimum amount of effort such that this collection is emptied, disregarding all other side effects such as referencing or garbage collection issues.Depending on the implementation, this may be just the same as
Collection.clear(). However, this could also have side effects like hampering the garbage collection or such.After calling this method, even a call of the normal
Collection.clear()is not guaranteed to fix all these issues. This can only be achieved by the methodSmartCollection.deepClear()below.- Specified by:
quickClearin interfaceSmartCollection<E>- Overrides:
quickClearin classAbstractSmartCollection<E>
-
deepClear
public void deepClear()
Description copied from interface:SmartCollectionThoroughly clears the collection, fixing all issues that may have been caused by a call of the aboveSmartCollection.quickClear().- Specified by:
deepClearin interfaceSmartCollection<E>- Overrides:
deepClearin classAbstractSmartCollection<E>
-
iterator
public Iterator<E> iterator()
- Specified by:
iteratorin interfaceCollection<E>- Specified by:
iteratorin interfaceIterable<E>- Overrides:
iteratorin classAbstractSmartCollection<E>
-
size
public int size()
- Specified by:
sizein interfaceCollection<E>- Specified by:
sizein classAbstractCollection<E>
-
isEmpty
public boolean isEmpty()
- Specified by:
isEmptyin interfaceCollection<E>- Overrides:
isEmptyin classAbstractCollection<E>
-
clear
public void clear()
- Specified by:
clearin interfaceCollection<E>- Overrides:
clearin classAbstractCollection<E>
-
swap
public void swap(UnorderedCollection<E> other)
Swaps the contents of thisUnorderedCollectionwith another one storing the same elements. This operation runs in constant time, by only swapping storage references.- Parameters:
other- theUnorderedCollectionto swap contents with.
-
-