Map
interface. This
implementation provides all of the optional map operations, and permits
null
values and the null
key. (The HashMap
class is roughly equivalent to Hashtable
, except that it is
unsynchronized and permits nulls.) This class makes no guarantees as to
the order of the map; in particular, it does not guarantee that the order
will remain constant over time.
This implementation provides constant-time performance for the basic
operations (get
and put
), assuming the hash function
disperses the elements properly among the buckets. Iteration over
collection views requires time proportional to the "capacity" of the
HashMap
instance (the number of buckets) plus its size (the number
of key-value mappings). Thus, it's very important not to set the initial
capacity too high (or the load factor too low) if iteration performance is
important.
An instance of HashMap
has two parameters that affect its
performance: initial capacity and load factor. The
capacity is the number of buckets in the hash table, and the initial
capacity is simply the capacity at the time the hash table is created. The
load factor is a measure of how full the hash table is allowed to
get before its capacity is automatically increased. When the number of
entries in the hash table exceeds the product of the load factor and the
current capacity, the hash table is rehashed (that is, internal data
structures are rebuilt) so that the hash table has approximately twice the
number of buckets.
As a general rule, the default load factor (.75) offers a good
tradeoff between time and space costs. Higher values decrease the
space overhead but increase the lookup cost (reflected in most of
the operations of the HashMap
class, including
get
and put
). The expected number of entries in
the map and its load factor should be taken into account when
setting its initial capacity, so as to minimize the number of
rehash operations. If the initial capacity is greater than the
maximum number of entries divided by the load factor, no rehash
operations will ever occur.
If many mappings are to be stored in a HashMap
instance, creating it with a sufficiently large capacity will allow
the mappings to be stored more efficiently than letting it perform
automatic rehashing as needed to grow the table. Note that using
many keys with the same hashCode()
is a sure way to slow
down performance of any hash table. To ameliorate impact, when keys
are Comparable
, this class may use comparison order among
keys to help break ties.
Note that this implementation is not synchronized.
If multiple threads access a hash map concurrently, and at least one of
the threads modifies the map structurally, it must be
synchronized externally. (A structural modification is any operation
that adds or deletes one or more mappings; merely changing the value
associated with a key that an instance already contains is not a
structural modification.) This is typically accomplished by
synchronizing on some object that naturally encapsulates the map.
If no such object exists, the map should be "wrapped" using the
Collections.
method. This is best done at creation time, to prevent accidental
unsynchronized access to the map:
Map m = Collections.synchronizedMap(new HashMap(...));
The iterators returned by all of this class's "collection view methods"
are fail-fast: if the map is structurally modified at any time after
the iterator is created, in any way except through the iterator's own
remove
method, the iterator will throw a
ConcurrentModificationException
. Thus, in the face of concurrent
modification, the iterator fails quickly and cleanly, rather than risking
arbitrary, non-deterministic behavior at an undetermined time in the
future.
Note that the fail-fast behavior of an iterator cannot be guaranteed
as it is, generally speaking, impossible to make any hard guarantees in the
presence of unsynchronized concurrent modification. Fail-fast iterators
throw ConcurrentModificationException
on a best-effort basis.
Therefore, it would be wrong to write a program that depended on this
exception for its correctness: the fail-fast behavior of iterators
should be used only to detect bugs.
This class is a member of the Java Collections Framework.
Object#hashCode()
, Collection
, Map
, TreeMap
, Hashtable
Modifier and Type | Class and Description |
---|---|
pack-priv class | |
pack-priv class | |
pack-priv static class | |
pack-priv abstract class | |
pack-priv static class | |
pack-priv class | |
pack-priv class | |
pack-priv static class | |
pack-priv static class | |
pack-priv static class | |
private static class | |
pack-priv class | |
pack-priv class | |
pack-priv static class |
Modifier and Type | Field and Description |
---|---|
pack-priv static final int | DEFAULT_INITIAL_CAPACITY
The default initial capacity - MUST be a power of two. |
pack-priv static final float | DEFAULT_LOAD_FACTOR
The load factor used when none specified in constructor. |
pack-priv transient Set | entrySet
Holds cached entrySet(). |
pack-priv final float | loadFactor
The load factor for the hash table. |
pack-priv static final int | MAXIMUM_CAPACITY
The maximum capacity, used if a higher value is implicitly specified by either of the constructors with arguments. |
pack-priv static final int | MIN_TREEIFY_CAPACITY
The smallest table capacity for which bins may be treeified. |
pack-priv transient int | modCount
The number of times this HashMap has been structurally modified Structural modifications are those that change the number of mappings in the HashMap or otherwise modify its internal structure (e.g., rehash). |
private static final long | |
pack-priv transient int | size
The number of key-value mappings contained in this map. |
pack-priv transient HashMap. | table
The table, initialized on first use, and resized as necessary. |
pack-priv int | threshold
The next size value at which to resize (capacity * load factor). |
pack-priv static final int | TREEIFY_THRESHOLD
The bin count threshold for using a tree rather than list for a bin. |
pack-priv static final int | UNTREEIFY_THRESHOLD
The bin count threshold for untreeifying a (split) bin during a resize operation. |
Access | Constructor and Description |
---|---|
public | HashMap(int
the initial capacity initialCapacity, float the load factor loadFactor)Constructs an empty |
public | HashMap(int
the initial capacity. initialCapacity)Constructs an empty |
public | HashMap()
Constructs an empty |
public |
Modifier and Type | Method and Description |
---|---|
pack-priv void | |
pack-priv void | |
pack-priv void | |
pack-priv static int | Returns: initial capacity for HashMap based classes.the expected number of mappings numMappings)Calculate initial capacity for HashMap based classes, from expected size and default load factor (0.75). |
pack-priv final int | |
public void | clear()
Overrides java. Implements java. Removes all of the mappings from this map. |
public Object | Returns: a shallow copy of this mapOverrides java. Returns a shallow copy of this |
pack-priv static Class | comparableClassFor(Object x)
Returns x's Class if it is of the form "class C implements Comparable<C>", else null. |
pack-priv static int | compareComparables(Class<?> kc, Object k, Object x)
Returns k.compareTo(x) if x matches kc (k's screened comparable class), else 0. |
public V | compute(K
key with which the specified value is to be associated key, BiFunction<? super K, ? super V, ? extends V> the remapping function to compute a value remappingFunction)Overrides default java. Attempts to compute a mapping for the specified key and its current
mapped value, or |
public V | computeIfAbsent(K
key with which the specified value is to be associated key, Function<? super K, ? extends V> the mapping function to compute a value mappingFunction)Overrides default java. If the specified key is not already associated with a value (or is mapped
to |
public V | computeIfPresent(K
key with which the specified value is to be associated key, BiFunction<? super K, ? super V, ? extends V> the remapping function to compute a value remappingFunction)Overrides default java. If the value for the specified key is present and non-null, attempts to compute a new mapping given the key and its current mapped value (optional operation). |
public boolean | Returns: true if this map contains a mapping for the specified
key.The key whose presence in this map is to be tested key)Overrides java. Implements java. Returns |
public boolean | Returns: true if this map maps one or more keys to the
specified valuevalue whose presence in this map is to be tested value)Overrides java. Implements java. Returns |
public Set | Returns: a set view of the mappings contained in this mapImplements abstract java. Implements java. Returns a |
public void | forEach(BiConsumer<? super K, ? super V>
The action to be performed for each entry action)Overrides default java. Performs the given action for each entry in this map until all entries have been processed or the action throws an exception. |
public V | get(Object
the key whose associated value is to be returned key)Overrides java. Implements java. Returns the value to which the specified key is mapped,
or |
pack-priv final HashMap. | |
public V | getOrDefault(Object
the key whose associated value is to be returned key, V the default mapping of the key defaultValue)Overrides default java. Returns the value to which the specified key is mapped, or
|
pack-priv static final int | |
pack-priv void | |
public boolean | Returns: true if this map contains no key-value mappingsOverrides java. Implements java. Returns |
public Set | Returns: a set view of the keys contained in this mapOverrides java. Implements java. Returns a |
pack-priv < type of array elements T> T[] | Returns: supplied arrayan array to fill a)Fills an array with this map keys and returns it. |
pack-priv final float | |
public V | merge(K
key with which the resulting value is to be associated key, V the non-null value to be merged with the existing value
associated with the key or, if no existing value or a null value
is associated with the key, to be associated with the key value, BiFunction<? super V, ? super V, ? extends V> the remapping function to recompute a value if
present remappingFunction)Overrides default java. If the specified key is not already associated with a value or is associated with null, associates it with the given non-null value (optional operation). |
public static < the type of keys maintained by the new map K, the type of mapped values V> HashMap | Returns: the newly created mapthe expected number of mappings numMappings)Creates a new, empty HashMap suitable for the expected number of mappings. |
pack-priv HashMap. | |
pack-priv HashMap. | |
pack-priv final < type of array elements T> T[] | Returns: an array ready to be filled and returned fromtoArray() method.an original array passed to a)toArray() methodPrepares the array for |
public V | Returns: the previous value associated withkey , or
null if there was no mapping for key .
(A null return can also indicate that the map
previously associated null with key .)key with which the specified value is to be associated key, V value to be associated with the specified key value)Overrides java. Implements java. Associates the specified value with the specified key in this map. |
public void | putAll(Map<? extends K, ? extends V>
mappings to be stored in this map m)Overrides java. Implements java. Copies all of the mappings from the specified map to this map. |
public V | putIfAbsent(K
key with which the specified value is to be associated key, V value to be associated with the specified key value)Overrides default java. If the specified key is not already associated with a value (or is mapped
to |
pack-priv final void | putMapEntries(Map<? extends K, ? extends V>
the map m, boolean false when initially constructing this map, else
true (relayed to method afterNodeInsertion). evict)Implements Map.putAll and Map constructor. |
pack-priv final V | Returns: previous value, or null if nonehash for key hash, K the key key, V the value to put value, boolean if true, don't change existing value onlyIfAbsent, boolean if false, the table is in creation mode. evict)Implements Map.put and related methods. |
private void | readObject(ObjectInputStream
the stream s)Reconstitutes this map from a stream (that is, deserializes it). |
pack-priv void | |
public V | Returns: the previous value associated withkey , or
null if there was no mapping for key .
(A null return can also indicate that the map
previously associated null with key .)key whose mapping is to be removed from the map key)Overrides java. Implements java. Removes the mapping for the specified key from this map if present. |
public boolean | remove(Object
key with which the specified value is associated key, Object value expected to be associated with the specified key value)Overrides default java. Removes the entry for the specified key only if it is currently mapped to the specified value (optional operation). |
pack-priv final HashMap. | Returns: the node, or null if nonehash for key hash, Object the key key, Object the value to match if matchValue, else ignored value, boolean if true only remove if value is equal matchValue, boolean if false do not move other nodes while removing movable)Implements Map.remove and related methods. |
public boolean | replace(K
key with which the specified value is associated key, V value expected to be associated with the specified key oldValue, V value to be associated with the specified key newValue)Overrides default java. Replaces the entry for the specified key only if currently mapped to the specified value (optional operation). |
public V | replace(K
key with which the specified value is associated key, V value to be associated with the specified key value)Overrides default java. Replaces the entry for the specified key only if it is currently mapped to some value (optional operation). |
public void | replaceAll(BiFunction<? super K, ? super V, ? extends V>
the function to apply to each entry function)Overrides default java. Replaces each entry's value with the result of invoking the given function on that entry until all entries have been processed or the function throws an exception (optional operation). |
pack-priv HashMap. | |
pack-priv HashMap. | |
pack-priv final HashMap. | |
public int | Returns: the number of key-value mappings in this mapOverrides java. Implements java. Returns the number of key-value mappings in this map. |
pack-priv static final int | |
pack-priv final void | treeifyBin(HashMap.
Replaces all linked nodes in bin at index for given hash unless table is too small, in which case resizes instead. |
public Collection | Returns: a view of the values contained in this mapOverrides java. Implements java. Returns a |
pack-priv < type of array elements T> T[] | Returns: supplied arrayan array to fill a)Fills an array with this map values and returns it. |
private void |