A deque-internal class for wrapping elements within the deque. This class maintains a doubly-linked list of all the elements in the deque. This class relies on {@code ScalableDeque} tomaintain correct references to to the head and tail of this list, and also to update it accordingly on additions and removals.
The value of the elements themselves are refered to by {@code ManagedReference} instances if they implement {@code ManagedObject} or are refered to using a standard Javareference.
{@code Element} instances use their value's hash code, but canbe distinguished by their {@code id}, which corresponds to the id assigned to them at the time of their addition to the deque. This method of hashing has the effect that when an {@code Element} is added to the deque, and subsequently added to thebacking map, the deque can locate all instances of the element by using the element's hash code. This behavior is required to correctly support the random access behavior of {@link ScalableDeque#remove(Object) remove}, {@link ScalableDeque#removeFirstOccurrence(Object) removeFirstOccurrence}, {@link ScalableDeque#removeLastOccurrence(Object) removeLastOccurrence}, and {@link ScalableDeque#removeAll(Collection) removeAll}.
@see ScalableDeque$ElementMatcher
@param < E> The type of element held by the deque