public class SequencedHashMap extends Object implements Map, Cloneable, Externalizable
Although this map is sequenced, it cannot implement List
because of incompatible interface definitions. The remove methods in List and
Map have different return values (see: List.remove(Object)
and Map.remove(Object)).
This class is not thread safe. When a thread safe implementation is required,
use Collections.synchronizedMap(Map) as it is documented,
or use explicit synchronization controls.
| Modifier and Type | Class and Description |
|---|---|
private static class |
SequencedHashMap.MapEntry
Map.Entry that doubles as a node in the linked list of
sequenced mappings. |
private class |
SequencedHashMap.OrderedIterator |
| Modifier and Type | Field and Description |
|---|---|
private HashMap |
entries
Map of keys to entries
|
private static int |
ENTRY |
private static int |
KEY |
private long |
modCount
Holds the number of modifications that have occurred to the map,
excluding modifications made through a collection view's iterator (e.g.
|
private static int |
REMOVED_MASK |
private SequencedHashMap.MapEntry |
sentinel
Sentinel used to hold the head and tail of the list of entries.
|
private static long |
serialVersionUID |
private static int |
VALUE |
| Constructor and Description |
|---|
SequencedHashMap()
Construct a new sequenced hash map with default initial size and load
factor.
|
SequencedHashMap(int initialSize)
Construct a new sequenced hash map with the specified initial size and
default load factor.
|
SequencedHashMap(int initialSize,
float loadFactor)
Construct a new sequenced hash map with the specified initial size and
load factor.
|
SequencedHashMap(Map m)
Construct a new sequenced hash map and add all the elements in the
specified map.
|
| Modifier and Type | Method and Description |
|---|---|
void |
clear()
Implements
Map.clear(). |
Object |
clone()
Creates a shallow copy of this object, preserving the internal structure
by copying only references.
|
boolean |
containsKey(Object key)
Implements
Map.containsKey(Object). |
boolean |
containsValue(Object value)
Implements
Map.containsValue(Object). |
private static SequencedHashMap.MapEntry |
createSentinel()
Construct an empty sentinel used to hold the head (sentinel.next) and the
tail (sentinel.prev) of the list.
|
Set |
entrySet()
Implements
Map.entrySet(). |
boolean |
equals(Object obj)
Implements
Map.equals(Object). |
Object |
get(int index)
Gets the key at the specified index.
|
Object |
get(Object o)
Implements
Map.get(Object). |
private Map.Entry |
getEntry(int index)
Returns the Map.Entry at the specified index
|
Map.Entry |
getFirst()
Return the entry for the "oldest" mapping.
|
Object |
getFirstKey()
Return the key for the "oldest" mapping.
|
Object |
getFirstValue()
Return the value for the "oldest" mapping.
|
Map.Entry |
getLast()
Return the entry for the "newest" mapping.
|
Object |
getLastKey()
Return the key for the "newest" mapping.
|
Object |
getLastValue()
Return the value for the "newest" mapping.
|
Object |
getValue(int index)
Gets the value at the specified index.
|
int |
hashCode()
Implements
Map.hashCode(). |
int |
indexOf(Object key)
Gets the index of the specified key.
|
private void |
insertEntry(SequencedHashMap.MapEntry entry)
Inserts a new internal entry to the tail of the linked list.
|
boolean |
isEmpty()
Implements
Map.isEmpty(). |
Iterator |
iterator()
Gets an iterator over the keys.
|
Set |
keySet()
Implements
Map.keySet(). |
int |
lastIndexOf(Object key)
Gets the last index of the specified key.
|
Object |
put(Object key,
Object value)
Implements
Map.put(Object, Object). |
void |
putAll(Map t)
Adds all the mappings in the specified map to this map, replacing any
mappings that already exist (as per
Map.putAll(Map)). |
void |
readExternal(ObjectInput in)
Deserializes this map from the given stream.
|
Object |
remove(int index)
Removes the element at the specified index.
|
Object |
remove(Object key)
Implements
Map.remove(Object). |
private void |
removeEntry(SequencedHashMap.MapEntry entry)
Removes an internal entry from the linked list.
|
private SequencedHashMap.MapEntry |
removeImpl(Object key)
Fully remove an entry from the map, returning the old entry or null if
there was no such entry with the specified key.
|
List |
sequence()
Returns a List view of the keys rather than a set view.
|
int |
size()
Implements
Map.size(). |
String |
toString()
Provides a string representation of the entries within the map.
|
Collection |
values()
Implements
Map.values(). |
void |
writeExternal(ObjectOutput out)
Serializes this map to the given stream.
|
finalize, getClass, notify, notifyAll, wait, wait, waitcompute, computeIfAbsent, computeIfPresent, forEach, getOrDefault, merge, putIfAbsent, remove, replace, replace, replaceAllprivate static final long serialVersionUID
private static final int KEY
private static final int VALUE
private static final int ENTRY
private static final int REMOVED_MASK
private transient SequencedHashMap.MapEntry sentinel
private HashMap entries
private transient long modCount
public SequencedHashMap()
public SequencedHashMap(int initialSize)
initialSize - the initial size for the hash tableHashMap(int)public SequencedHashMap(int initialSize,
float loadFactor)
initialSize - the initial size for the hash tableloadFactor - the load factor for the hash table.HashMap(int,float)public SequencedHashMap(Map m)
putAll(Map).m - The original mapprivate static SequencedHashMap.MapEntry createSentinel()
null
key and value.private void removeEntry(SequencedHashMap.MapEntry entry)
entry - The entry to removeprivate void insertEntry(SequencedHashMap.MapEntry entry)
entry - The entry to insertpublic int size()
Map.size().public boolean isEmpty()
Map.isEmpty().public boolean containsKey(Object key)
Map.containsKey(Object).containsKey in interface Mappublic boolean containsValue(Object value)
Map.containsValue(Object).containsValue in interface Mappublic Object get(Object o)
Map.get(Object).public Map.Entry getFirst()
entrySet().iterator().next(), but this method provides an
optimized implementation.null if the
map is empty.public Object getFirstKey()
getFirst().getKey(), but this method provides a slightly
optimized implementation.null if the map
is empty.public Object getFirstValue()
getFirst().getValue(), but this method provides a
slightly optimized implementation.null if the
map is empty.public Map.Entry getLast()
Object obj = null;
Iterator iter = entrySet().iterator();
while ( iter.hasNext() )
{
obj = iter.next();
}
return ( Map.Entry ) obj;
However, the implementation of this method ensures an O(1) lookup of the
last key rather than O(n).null if the map
is empty.public Object getLastKey()
getLast().getKey(), but this method provides a slightly
optimized implementation.null if the map
is empty.public Object getLastValue()
getLast().getValue(), but this method provides a slightly
optimized implementation.null if the map
is empty.public Object put(Object key, Object value)
Map.put(Object, Object).public Object remove(Object key)
Map.remove(Object).private SequencedHashMap.MapEntry removeImpl(Object key)
key - The key to retreivepublic void putAll(Map t)
Map.putAll(Map)). The order
in which the entries are added is determined by the iterator returned
from Map.entrySet() for the specified map.putAll in interface Mapt - the mappings that should be added to this map.NullPointerException - if t is nullpublic void clear()
Map.clear().public boolean equals(Object obj)
Map.equals(Object).public int hashCode()
Map.hashCode().public String toString()
entrySet().iterator() and
iterate over the entries in the map formatting them as appropriate.public Set keySet()
Map.keySet().public Collection values()
Map.values().public Set entrySet()
Map.entrySet().public Object clone() throws CloneNotSupportedException
clone()'d. The cloned object maintains the same sequence.clone in class ObjectCloneNotSupportedException - if clone is not supported by a subclass.private Map.Entry getEntry(int index)
index - The index we are looking forArrayIndexOutOfBoundsException - if the specified index is < 0 or
> the size of the map.public Object get(int index)
index - the index to retrieveArrayIndexOutOfBoundsException - if the index is < 0 or
> the size of the map.public Object getValue(int index)
index - the index to retrieveArrayIndexOutOfBoundsException - if the index is < 0 or
> the size of the map.public int indexOf(Object key)
key - the key to find the index ofpublic Iterator iterator()
public int lastIndexOf(Object key)
key - the key to find the index ofpublic List sequence()
ListIterator.set(Object)) will effectively
remove the value from the list and reinsert that value at the end of the
list, which is an unexpected side effect of changing the value of a list.
This occurs because changing the key, changes when the mapping is added
to the map and thus where it appears in the list.
An alternative to this method is to use keySet()
keySet()public Object remove(int index)
index - The index of the object to remove.key, or
null if none existed.ArrayIndexOutOfBoundsException - if the index is < 0 or
> the size of the map.public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
readExternal in interface Externalizablein - the stream to deserialize fromIOException - if the stream raises itClassNotFoundException - if the stream raises itpublic void writeExternal(ObjectOutput out) throws IOException
writeExternal in interface Externalizableout - the stream to serialize toIOException - if the stream raises itCopyright © 2003–2023 The Apache Software Foundation. All rights reserved.