null
object can be used as a key or as a value.
To successfully store and retrieve objects from a hashtable, the
objects used as keys must implement the hashCode
method and the equals
method.
An instance of Hashtable
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. Note that the hash table is open: in the case of a "hash
collision", a single bucket stores multiple entries, which must be searched
sequentially. The load factor is a measure of how full the hash
table is allowed to get before its capacity is automatically increased.
The initial capacity and load factor parameters are merely hints to
the implementation. The exact details as to when and whether the rehash
method is invoked are implementation-dependent.
Generally, the default load factor (.75) offers a good tradeoff between
time and space costs. Higher values decrease the space overhead but
increase the time cost to look up an entry (which is reflected in most
Hashtable
operations, including get
and put
).
The initial capacity controls a tradeoff between wasted space and the
need for rehash
operations, which are time-consuming.
No rehash
operations will ever occur if the initial
capacity is greater than the maximum number of entries the
Hashtable
will contain divided by its load factor. However,
setting the initial capacity too high can waste space.
If many entries are to be made into a Hashtable
,
creating it with a sufficiently large capacity may allow the
entries to be inserted more efficiently than letting it perform
automatic rehashing as needed to grow the table.
This example creates a hashtable of numbers. It uses the names of the numbers as keys:
Hashtable<String, Integer> numbers
= new Hashtable<String, Integer>();
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);
To retrieve a number, use the following code:
Integer n = numbers.get("two");
if (n != null) {
System.out.println("two = " + n);
}
The iterators returned by the iterator
method of the collections
returned by all of this class's "collection view methods" are
fail-fast: if the Hashtable 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.
The Enumerations returned by Hashtable's keys
and
elements
methods are not fail-fast; if the
Hashtable is structurally modified at any time after the enumeration is
created then the results of enumerating are undefined.
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.
As of the Java 2 platform v1.2, this class was retrofitted to
implement the Map
interface, making it a member of the
Java Collections Framework. Unlike the new collection
implementations, Hashtable
is synchronized. If a
thread-safe implementation is not needed, it is recommended to use
HashMap
in place of Hashtable
. If a thread-safe
highly-concurrent implementation is desired, then it is recommended
to use java.
in place of
Hashtable
.
Object#equals(java.lang.Object)
, Object#hashCode()
, Hashtable#rehash()
, Collection
, Map
, HashMap
, TreeMap
Modifier and Type | Class and Description |
---|---|
private static class | |
private class | |
private class | |
private class | |
private static class | |
private class |
Modifier and Type | Field and Description |
---|---|
private transient int | count
The total number of entries in the hash table. |
private static final int | |
private transient volatile Set | |
private static final int | |
private transient volatile Set | keySet
Each of these fields are initialized to contain an instance of the appropriate view the first time this view is requested. |
private float | loadFactor
The load factor for the hashtable. |
private static final int | MAX_ARRAY_SIZE
The maximum size of array to allocate. |
private transient int | modCount
The number of times this Hashtable has been structurally modified Structural modifications are those that change the number of entries in the Hashtable or otherwise modify its internal structure (e.g., rehash). |
private static final long | serialVersionUID
use serialVersionUID from JDK 1.0.2 for interoperability |
private transient Hashtable. | table
The hash table data. |
private int | threshold
The table is rehashed when its size exceeds this threshold. |
private transient volatile Collection | |
private static final int |
Access | Constructor and Description |
---|---|
public | Hashtable(int
the initial capacity of the hashtable. initialCapacity, float the load factor of the hashtable. loadFactor)Constructs a new, empty hashtable with the specified initial capacity and the specified load factor. |
public | Hashtable(int
the initial capacity of the hashtable. initialCapacity)Constructs a new, empty hashtable with the specified initial capacity and default load factor (0.75). |
public | Hashtable()
Constructs a new, empty hashtable with a default initial capacity (11) and load factor (0.75). |
public | |
pack-priv | Hashtable(Void
a dummy parameter dummy)A constructor chained from |
Modifier and Type | Method and Description |
---|---|
private void | |
public synchronized void | |
public synchronized Object | Returns: a clone of the hashtableOverrides java. Creates a shallow copy of this hashtable. |
pack-priv final Hashtable | |
public synchronized 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 synchronized 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 synchronized 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 synchronized boolean | |
public synchronized boolean | Returns: true if and only if the specified object
is a key in this hashtable, as determined by the
equals method; false otherwise.possible key key)Implements java. Tests if the specified object is a key in this hashtable. |
public boolean | Returns: true if this map maps one or more keys to the
specified valuevalue whose presence in this hashtable is to be tested value)Implements java. Returns true if this hashtable maps one or more keys to this value. |
pack-priv final void | defaultWriteHashtable(ObjectOutputStream s, int length, float loadFactor)
Called by Properties to write out a simulated threshold and loadfactor. |
public synchronized Enumeration | Returns: an enumeration of the values in this hashtable.Implements abstract java. Returns an enumeration of the values in this hashtable. |
public Set | entrySet()
Implements java. Returns a |
public synchronized boolean | Returns: true if the specified Object is equal to this Mapobject to be compared for equality with this hashtable o)Overrides java. Implements java. Compares the specified Object with this Map for equality, as per the definition in the Map interface. |
public synchronized 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 synchronized V | Returns: the value to which the specified key is mapped, ornull if this map contains no mapping for the keythe key whose associated value is to be returned key)Implements abstract java. Implements java. Returns the value to which the specified key is mapped,
or |
private <T> Enumeration | |
private <T> Iterator | |
public synchronized 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
|
public synchronized int | hashCode()
Overrides java. Implements java. Returns the hash code value for this Map as per the definition in the Map interface. |
public synchronized boolean | Returns: true if this hashtable maps no keys to values;
false otherwise.Implements abstract java. Implements java. Tests if this hashtable maps no keys to values. |
public synchronized Enumeration | Returns: an enumeration of the keys in this hashtable.Implements abstract java. Returns an enumeration of the keys in this hashtable. |
public Set | |
public synchronized 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 synchronized V | Returns: the previous value of the specified key in this hashtable, ornull if it did not have onethe hashtable key key, V the value value)Implements abstract java. Implements java. Maps the specified |
public synchronized void | putAll(Map<? extends K, ? extends V>
mappings to be stored in this map t)Implements java. Copies all of the mappings from the specified map to this hashtable. |
public synchronized 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 void | readHashtable(ObjectInputStream s)
Perform deserialization of the Hashtable from an ObjectInputStream. |
private void | |
private void | |
protected void | rehash()
Increases the capacity of and internally reorganizes this hashtable, in order to accommodate and access its entries more efficiently. |
public synchronized V | Returns: the value to which the key had been mapped in this hashtable, ornull if the key did not have a mappingthe key that needs to be removed key)Implements abstract java. Implements java. Removes the key (and its corresponding value) from this hashtable. |
public synchronized 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). |
public synchronized 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 synchronized 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 synchronized 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). |
public synchronized int | Returns: the number of keys in this hashtable.Implements abstract java. Implements java. Returns the number of keys in this hashtable. |
public synchronized String | Returns: a string representation of this hashtableOverrides java. Returns a string representation of this |
public Collection | values()
Implements java. Returns a |
pack-priv void | writeHashtable(ObjectOutputStream s)
Perform serialization of the Hashtable to an ObjectOutputStream. |
private void |