org.apache.commons.collections.map
public class AbstractLinkedMap extends AbstractHashedMap implements OrderedMap
This class implements all the features necessary for a subclass linked
hash-based map. Key-value entries are stored in instances of the
LinkEntry
class which can be overridden and replaced.
The iterators can similarly be replaced, without the need to replace the KeySet,
EntrySet and Values view classes.
Overridable methods are provided to change the default hashing behaviour, and to change how entries are added to and removed from the map. Hopefully, all you need for unusual subclasses is here.
This implementation maintains order by original insertion, but subclasses
may work differently. The OrderedMap
interface is implemented
to provide access to bidirectional iteration and extra convenience methods.
The orderedMapIterator()
method provides direct access to a
bidirectional iterator. The iterators from the other views can also be cast
to OrderedIterator
if required.
All the available iterators can be reset back to the start by casting to
ResettableIterator
and calling reset()
.
The implementation is also designed to be subclassed, with lots of useful methods exposed.
Since: Commons Collections 3.0
Version: $Revision: 158688 $ $Date: 2005-03-22 22:14:15 +0000 (Tue, 22 Mar 2005) $
Nested Class Summary | |
---|---|
protected static class | AbstractLinkedMap.EntrySetIterator
EntrySet iterator. |
protected static class | AbstractLinkedMap.KeySetIterator
KeySet iterator. |
protected static class | AbstractLinkedMap.LinkEntry
LinkEntry that stores the data.
|
protected abstract static class | AbstractLinkedMap.LinkIterator
Base Iterator that iterates in link order. |
protected static class | AbstractLinkedMap.LinkMapIterator
MapIterator implementation. |
protected static class | AbstractLinkedMap.ValuesIterator
Values iterator. |
Field Summary | |
---|---|
protected AbstractLinkedMap.LinkEntry | header Header in the linked list |
Constructor Summary | |
---|---|
protected | AbstractLinkedMap()
Constructor only used in deserialization, do not use otherwise. |
protected | AbstractLinkedMap(int initialCapacity, float loadFactor, int threshold)
Constructor which performs no validation on the passed in parameters.
|
protected | AbstractLinkedMap(int initialCapacity)
Constructs a new, empty map with the specified initial capacity.
|
protected | AbstractLinkedMap(int initialCapacity, float loadFactor)
Constructs a new, empty map with the specified initial capacity and
load factor.
|
protected | AbstractLinkedMap(Map map)
Constructor copying elements from another map.
|
Method Summary | |
---|---|
protected void | addEntry(HashEntry entry, int hashIndex)
Adds an entry into this map, maintaining insertion order.
|
void | clear()
Clears the map, resetting the size to zero and nullifying references
to avoid garbage collection issues. |
boolean | containsValue(Object value)
Checks whether the map contains the specified value.
|
protected HashEntry | createEntry(HashEntry next, int hashCode, Object key, Object value)
Creates an entry to store the data.
|
protected Iterator | createEntrySetIterator()
Creates an entry set iterator.
|
protected Iterator | createKeySetIterator()
Creates a key set iterator.
|
protected Iterator | createValuesIterator()
Creates a values iterator.
|
protected AbstractLinkedMap.LinkEntry | entryAfter(AbstractLinkedMap.LinkEntry entry)
Gets the after field from a LinkEntry .
|
protected AbstractLinkedMap.LinkEntry | entryBefore(AbstractLinkedMap.LinkEntry entry)
Gets the before field from a LinkEntry .
|
Object | firstKey()
Gets the first key in the map, which is the most recently inserted.
|
protected AbstractLinkedMap.LinkEntry | getEntry(int index)
Gets the key at the specified index.
|
protected void | init()
Initialise this subclass during construction.
|
Object | lastKey()
Gets the last key in the map, which is the first inserted.
|
MapIterator | mapIterator()
Gets an iterator over the map.
|
Object | nextKey(Object key)
Gets the next key in sequence.
|
OrderedMapIterator | orderedMapIterator()
Gets a bidirectional iterator over the map.
|
Object | previousKey(Object key)
Gets the previous key in sequence.
|
protected void | removeEntry(HashEntry entry, int hashIndex, HashEntry previous)
Removes an entry from the map and the linked list.
|
Parameters: initialCapacity the initial capacity, must be a power of two loadFactor the load factor, must be > 0.0f and generally < 1.0f threshold the threshold, must be sensible
Parameters: initialCapacity the initial capacity
Throws: IllegalArgumentException if the initial capacity is less than one
Parameters: initialCapacity the initial capacity loadFactor the load factor
Throws: IllegalArgumentException if the initial capacity is less than one IllegalArgumentException if the load factor is less than zero
Parameters: map the map to copy
Throws: NullPointerException if the map is null
This implementation adds the entry to the data storage table and to the end of the linked list.
Parameters: entry the entry to add hashIndex the index into the data array to store at
Parameters: value the value to search for
Returns: true if the map contains the value
This implementation creates a new LinkEntry instance.
Parameters: next the next entry in sequence hashCode the hash code to use key the key to store value the value to store
Returns: the newly created entry
Returns: the entrySet iterator
Returns: the keySet iterator
Returns: the values iterator
after
field from a LinkEntry
.
Used in subclasses that have no visibility of the field.
Parameters: entry the entry to query, must not be null
Returns: the after
field of the entry
Throws: NullPointerException if the entry is null
Since: Commons Collections 3.1
before
field from a LinkEntry
.
Used in subclasses that have no visibility of the field.
Parameters: entry the entry to query, must not be null
Returns: the before
field of the entry
Throws: NullPointerException if the entry is null
Since: Commons Collections 3.1
Returns: the most recently inserted key
Parameters: index the index to retrieve
Returns: the key at the specified index
Throws: IndexOutOfBoundsException if the index is invalid
NOTE: As from v3.2 this method calls AbstractLinkedMap to create the map entry object.
Returns: the eldest key
A MapIterator returns the keys in the map. It also provides convenient methods to get the key and value, and set the value. It avoids the need to create an entrySet/keySet/values object.
Returns: the map iterator
Parameters: key the key to get after
Returns: the next key
A MapIterator returns the keys in the map. It also provides convenient methods to get the key and value, and set the value. It avoids the need to create an entrySet/keySet/values object.
Returns: the map iterator
Parameters: key the key to get before
Returns: the previous key
This implementation removes the entry from the linked list chain, then calls the superclass implementation.
Parameters: entry the entry to remove hashIndex the index into the data structure previous the previous entry in the chain