Most visited

Recently visited

Added in API level 1

Hashtable

public class Hashtable
extends Dictionary<K, V> implements Map<K, V>, Cloneable, Serializable

java.lang.Object
   ↳ java.util.Dictionary<K, V>
     ↳ java.util.Hashtable<K, V>
Known Direct Subclasses
Known Indirect Subclasses


这个类实现了一个哈希表,它将键映射到值。 任何非null对象都可以用作键或值。

要成功地存储和检索哈希表中的对象,用作键的对象必须实现 hashCode方法和 equals方法。

Hashtable一个实例有两个影响其性能的参数: 初始容量负载因子 容量是哈希表中的数量, 初始容量就是哈希表创建时的容量。 请注意,散列表是打开的 :对于“散列冲突”,单个存储区存储多个条目,这些条目必须按顺序搜索。 加载因子是散列表在其容量自动增加之前被允许获得的满量程的度量。 初始容量和负载因数参数仅仅是实现的提示。 有关何时以及是否调用rehash方法的确切细节取决于实现。

通常,默认的加载因子(.75)在时间和空间成本之间提供了一个很好的折衷。 较高的值会减少空间开销,但会增加查找条目的时间成本(这反映在大多数Hashtable操作中,包括getput )。

初始容量控制了浪费的空间和需要rehash操作之间的权衡,这是非常耗时的。 如果初始容量大于Hashtable将包含的最大输入数量除以其负载因子,则不会发生rehash操作。 但是,将初始容量设置得太高会浪费空间。

如果将很多条目制作为 Hashtable ,那么使用足够大的容量创建条目可能会使条目插入的效率高于根据需要执行自动重新散列以增大表格的效率。

这个例子创建了一个数字哈希表。 它使用数字的名称作为关键字:

   Hashtable<String, Integer> numbers
     = new Hashtable<String, Integer>();
   numbers.put("one", 1);
   numbers.put("two", 2);
   numbers.put("three", 3);

要检索一个数字,请使用以下代码:

   Integer n = numbers.get("two");
   if (n != null) {
     System.out.println("two = " + n);
   }

由所有这个类的“集合视图方法”返回的集合的iterator方法返回的迭代器是快速失败的 :如果在创建迭代器后的任何时候对结构进行修改,除了通过迭代器自己的remove方法,迭代器将抛出一个ConcurrentModificationException 因此,面对并发修改,迭代器快速而干净地失败,而不是在将来某个未确定的时间冒着任意的,非确定性的行为风险。 Hashtable的键和元素方法返回的枚举不是快速失败的。

请注意,迭代器的故障快速行为无法得到保证,因为一般来说,在存在非同步并发修改的情况下不可能做出任何硬性保证。 失败快速迭代器在尽力而为的基础上抛出ConcurrentModificationException 因此,编写一个依赖于此异常的程序是正确的: 迭代器的快速失败行为应仅用于检测错误。

从Java 2平台v1.2开始,这个类被改进以实现Map接口,使其成为Java Collections Framework的成员。 与新的集合实现不同, Hashtable已同步。 如果不需要线程安全实现,则建议使用HashMap来代替Hashtable 如果需要线程安全的高度并行实现,则建议使用ConcurrentHashMap来代替Hashtable

也可以看看:

Summary

Public constructors

Hashtable(int initialCapacity, float loadFactor)

用指定的初始容量和指定的加载因子构造一个新的空的散列表。

Hashtable(int initialCapacity)

用指定的初始容量和默认加载因子(0.75)构造一个新的空哈希表。

Hashtable()

使用默认的初始容量(11)和加载因子(0.75)构造一个新的空哈希表。

Hashtable(Map<? extends K, ? extends V> t)

使用与给定Map相同的映射构造一个新的散列表。

Public methods

void clear()

清除这个散列表,以便它不包含任何键。

Object clone()

创建此散列表的浅表副本。

V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)

尝试计算指定键和其当前映射值的映射(如果没有当前映射, null )。

V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)

如果指定的键尚未与值关联(或映射到 null ),则尝试使用给定的映射函数计算其值,并将其输入到此映射中,除非 null

V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)

如果指定键的值存在且非空,则尝试计算给定键和其当前映射值的新映射。

boolean contains(Object value)

测试某个键是否映射到此散列表中的指定值。

boolean containsKey(Object key)

测试指定的对象是否是此散列表中的键。

boolean containsValue(Object value)

如果此散列表将一个或多个键映射到此值,则返回true。

Enumeration<V> elements()

返回此散列表中值的枚举。

Set<Entry<K, V>> entrySet()

返回此映射中包含的映射的 Set视图。

boolean equals(Object o)

按照Map接口中的定义,将指定的Object与此Map进行比较以获得相等性。

void forEach(BiConsumer<? super K, ? super V> action)

对此映射中的每个条目执行给定操作,直到处理完所有条目或操作抛出异常为止。

V get(Object key)

返回指定键映射到的值,如果此映射不包含键映射,则返回 null

V getOrDefault(Object key, V defaultValue)

返回指定键映射到的值,或者如果此映射不包含键映射,则返回 defaultValue

int hashCode()

根据Map界面中的定义返回此Map的哈希码值。

boolean isEmpty()

测试这个哈希表是否没有将键映射到值。

Set<K> keySet()

返回此映射中包含的键的 Set视图。

Enumeration<K> keys()

返回此散列表中键的枚举。

V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction)

如果指定的键尚未与某个值关联或者与null关联,则将其与给定的非空值相关联。

V put(K key, V value)

将指定的 key映射到此散列表中的指定 value

void putAll(Map<? extends K, ? extends V> t)

将指定映射中的所有映射复制到此散列表。

V putIfAbsent(K key, V value)

如果指定的键尚未与值关联(或映射到 null ), null其与给定值相关联并返回 null ,否则返回当前值。

boolean remove(Object key, Object value)

只有在指定键当前映射到指定值时,才删除该条目。

V remove(Object key)

从该散列表中删除键(及其相应的值)。

boolean replace(K key, V oldValue, V newValue)

仅当当前映射到指定值时才替换指定键的条目。

V replace(K key, V value)

仅当指定键的条目映射到某个值时才替换该条目。

void replaceAll(BiFunction<? super K, ? super V, ? extends V> function)

用对该条目调用给定函数的结果替换每个条目的值,直到处理完所有条目或者该函数抛出异常。

int size()

返回此散列表中的键的数量。

String toString()

返回一组条目,括在括号由ASCII字符 “, ”(逗号和空格)分隔开的形式这 Hashtable对象的字符串表示。

Collection<V> values()

返回此映射中包含的值的 Collection视图。

Protected methods

void rehash()

增加散列表的容量并在内部重新组织,以便更有效地容纳和访问条目。

Inherited methods

From class java.util.Dictionary
From class java.lang.Object
From interface java.util.Map

Public constructors

Hashtable

Added in API level 1
Hashtable (int initialCapacity, 
                float loadFactor)

用指定的初始容量和指定的加载因子构造一个新的空的散列表。

Parameters
initialCapacity int: the initial capacity of the hashtable.
loadFactor float: the load factor of the hashtable.
Throws
IllegalArgumentException if the initial capacity is less than zero, or if the load factor is nonpositive.

Hashtable

Added in API level 1
Hashtable (int initialCapacity)

用指定的初始容量和默认加载因子(0.75)构造一个新的空哈希表。

Parameters
initialCapacity int: the initial capacity of the hashtable.
Throws
IllegalArgumentException if the initial capacity is less than zero.

Hashtable

Added in API level 1
Hashtable ()

使用默认的初始容量(11)和加载因子(0.75)构造一个新的空哈希表。

Hashtable

Added in API level 1
Hashtable (Map<? extends K, ? extends V> t)

使用与给定Map相同的映射构造一个新的散列表。 散列表的初始容量足以容纳给定Map中的映射和默认加载因子(0.75)。

Parameters
t Map: the map whose mappings are to be placed in this map.
Throws
NullPointerException if the specified map is null.

Public methods

clear

Added in API level 1
void clear ()

清除这个散列表,以便它不包含任何键。

clone

Added in API level 1
Object clone ()

创建此散列表的浅表副本。 散列表本身的所有结构都被复制,但键和值不会被克隆。 这是一个相对昂贵的操作。

Returns
Object a clone of the hashtable

compute

Added in API level 24
V compute (K key, 
                BiFunction<? super K, ? super V, ? extends V> remappingFunction)

尝试计算指定键和其当前映射值的映射(如果没有当前映射, null )。 例如,要创建或附加一个String味精到值映射:

 map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))
(Method merge() is often simpler to use for such purposes.)

如果重新映射函数返回null ,映射将被删除(如果最初不存在,则保持不存在)。 如果重映射函数本身抛出一个(未经检查的)异常,则重新抛出异常,并且当前映射保持不变。

重新映射函数不应该在计算过程中修改此映射。

Parameters
key K: key with which the specified value is to be associated
remappingFunction BiFunction: the remapping function to compute a value
Returns
V the new value associated with the specified key, or null if none

computeIfAbsent

Added in API level 24
V computeIfAbsent (K key, 
                Function<? super K, ? extends V> mappingFunction)

如果指定键尚未与值关联(或映射到 null ),则尝试使用给定的映射函数计算其值,并将其输入到此映射中,除非 null

如果映射函数返回null ,则不记录映射。 如果映射函数本身抛出(未经检查的)异常,则重新抛出异常,并且不记录映射。 最常见的用法是构造一个新的对象作为初始映射值或记忆结果,如下所示:

 map.computeIfAbsent(key, k -> new Value(f(k)));
 

或者实现一个多值映射 Map<K,Collection<V>> ,每个键支持多个值:

 map.computeIfAbsent(key, k -> new HashSet<V>()).add(v);
 

计算过程中映射函数不应修改此映射。

Parameters
key K: key with which the specified value is to be associated
mappingFunction Function: the mapping function to compute a value
Returns
V the current (existing or computed) value associated with the specified key, or null if the computed value is null

computeIfPresent

Added in API level 24
V computeIfPresent (K key, 
                BiFunction<? super K, ? super V, ? extends V> remappingFunction)

如果指定键的值存在且非空,则尝试计算给定键和其当前映射值的新映射。

如果重映射函数返回null ,则映射被移除。 如果重映射函数本身抛出一个(未经检查的)异常,则重新抛出异常,并且当前映射保持不变。

重新映射函数不应该在计算过程中修改此映射。

Parameters
key K: key with which the specified value is to be associated
remappingFunction BiFunction: the remapping function to compute a value
Returns
V the new value associated with the specified key, or null if none

contains

Added in API level 1
boolean contains (Object value)

测试某个键是否映射到此散列表中的指定值。 该操作比containsKey方法更昂贵。

请注意,此方法在功能上与 containsValue (它是集合框架中的 Map接口的一部分) Map

Parameters
value Object: a value to search for
Returns
boolean true if and only if some key maps to the value argument in this hashtable as determined by the equals method; false otherwise.
Throws
NullPointerException if the value is null

containsKey

Added in API level 1
boolean containsKey (Object key)

测试指定的对象是否是此散列表中的键。

Parameters
key Object: possible key
Returns
boolean true if and only if the specified object is a key in this hashtable, as determined by the equals method; false otherwise.
Throws
NullPointerException if the key is null

也可以看看:

containsValue

Added in API level 1
boolean containsValue (Object value)

如果此散列表将一个或多个键映射到此值,则返回true。

请注意,此方法在功能上与 contains (它早于 Map接口)相同。

Parameters
value Object: value whose presence in this hashtable is to be tested
Returns
boolean true if this map maps one or more keys to the specified value
Throws
NullPointerException if the value is null

elements

Added in API level 1
Enumeration<V> elements ()

返回此散列表中值的枚举。 在返回的对象上使用Enumeration方法来顺序获取元素。

Returns
Enumeration<V> an enumeration of the values in this hashtable.

也可以看看:

entrySet

Added in API level 1
Set<Entry<K, V>> entrySet ()

返回此映射中映射的映射的Set视图。 该集合由地图支持,因此对地图的更改反映在集合中,反之亦然。 如果在对集合进行迭代的过程中修改了映射(除了通过迭代器自己的remove操作或通过对迭代器返回的映射条目执行setValue操作),迭代的结果是未定义的。 该组支持元件移除,即从映射中相应的映射,经由Iterator.remove,Set.remove,removeAll,retainAll clear和操作。 它不支持addaddAll操作。

Returns
Set<Entry<K, V>> a set view of the mappings contained in this map

equals

Added in API level 1
boolean equals (Object o)

按照Map接口中的定义,将指定的Object与此Map进行比较以获得相等性。

Parameters
o Object: object to be compared for equality with this hashtable
Returns
boolean true if the specified Object is equal to this Map

也可以看看:

forEach

Added in API level 24
void forEach (BiConsumer<? super K, ? super V> action)

对此映射中的每个条目执行给定操作,直到处理完所有条目或操作抛出异常为止。 除非实现类另有规定,否则按照条目集迭代的顺序执行操作(如果指定了迭代顺序)。操作抛出的异常会中继给调用者。

Parameters
action BiConsumer: The action to be performed for each entry

get

Added in API level 1
V get (Object key)

返回指定键映射到的值,如果此映射不包含键映射,则返回 null

更正式地说,如果该映射包含从键k到值v的映射,例如(key.equals(k)) ,则该方法返回v ; 否则返回null (最多可以有一个这样的映射。)

Parameters
key Object: the key whose associated value is to be returned
Returns
V the value to which the specified key is mapped, or null if this map contains no mapping for the key
Throws
NullPointerException if the specified key is null

也可以看看:

getOrDefault

Added in API level 24
V getOrDefault (Object key, 
                V defaultValue)

返回指定键映射到的值 defaultValue如果此映射不包含键映射,则返回 defaultValue

Parameters
key Object: the key whose associated value is to be returned
defaultValue V: the default mapping of the key
Returns
V the value to which the specified key is mapped, or defaultValue if this map contains no mapping for the key

hashCode

Added in API level 1
int hashCode ()

根据Map界面中的定义返回此Map的哈希码值。

Returns
int a hash code value for this object.

也可以看看:

isEmpty

Added in API level 1
boolean isEmpty ()

测试这个哈希表是否没有将键映射到值。

Returns
boolean true if this hashtable maps no keys to values; false otherwise.

keySet

Added in API level 1
Set<K> keySet ()

返回此映射中包含的键的Set视图。 该集合由地图支持,因此对地图的更改反映在集合中,反之亦然。 如果在对集合进行迭代的过程中修改了映射(除了通过迭代器自己的remove操作),迭代的结果是未定义的。 该组支持元件移除,即从映射中相应的映射,经由Iterator.remove,Set.remove,removeAll,retainAll,clear操作。 它不支持addaddAll操作。

Returns
Set<K> a set view of the keys contained in this map

keys

Added in API level 1
Enumeration<K> keys ()

返回此散列表中键的枚举。

Returns
Enumeration<K> an enumeration of the keys in this hashtable.

也可以看看:

merge

Added in API level 24
V merge (K key, 
                V value, 
                BiFunction<? super V, ? super V, ? extends V> remappingFunction)

如果指定的键尚未与某个值关联或者与null关联,则将其与给定的非空值相关联。 否则,用给定的重映射函数的结果替换关联的值,或者如果结果为null ,则将其删除。 组合键的多个映射值时,此方法可能会有用。 例如,要创建或附加一个String msg到值映射:

 map.merge(key, msg, String::concat)
 

如果重映射函数返回null ,则映射将被删除。 如果重映射函数本身抛出一个(未经检查的)异常,则重新抛出异常,并且当前映射保持不变。

重新映射函数不应该在计算过程中修改此映射。

Parameters
key K: key with which the resulting value is to be associated
value 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
remappingFunction BiFunction: the remapping function to recompute a value if present
Returns
V the new value associated with the specified key, or null if no value is associated with the key

put

Added in API level 1
V put (K key, 
                V value)

将指定的key映射到此散列表中指定的value 关键和价值都不是null

可以通过使用与原始密钥相同的密钥调用 get方法来检索该值。

Parameters
key K: the hashtable key
value V: the value
Returns
V the previous value of the specified key in this hashtable, or null if it did not have one
Throws
NullPointerException if the key or value is null

也可以看看:

putAll

Added in API level 1
void putAll (Map<? extends K, ? extends V> t)

将指定映射中的所有映射复制到此散列表。 这些映射将替换此散列表对当前指定映射中的任何键的任何映射。

Parameters
t Map: mappings to be stored in this map
Throws
NullPointerException if the specified map is null

putIfAbsent

Added in API level 24
V putIfAbsent (K key, 
                V value)

如果指定的键尚未与值关联(或映射到 null ), null其与给定值相关联并返回 null ,否则返回当前值。

Parameters
key K: key with which the specified value is to be associated
value V: value to be associated with the specified key
Returns
V the previous value associated with the specified key, or null if there was no mapping for the key. (A null return can also indicate that the map previously associated null with the key, if the implementation supports null values.)

remove

Added in API level 24
boolean remove (Object key, 
                Object value)

只有在指定键当前映射到指定值时,才删除该条目。

Parameters
key Object: key with which the specified value is associated
value Object: value expected to be associated with the specified key
Returns
boolean true if the value was removed

remove

Added in API level 1
V remove (Object key)

从该散列表中删除键(及其相应的值)。 如果密钥不在散列表中,此方法不执行任何操作。

Parameters
key Object: the key that needs to be removed
Returns
V the value to which the key had been mapped in this hashtable, or null if the key did not have a mapping
Throws
NullPointerException if the key is null

replace

Added in API level 24
boolean replace (K key, 
                V oldValue, 
                V newValue)

仅当当前映射到指定值时才替换指定键的条目。

Parameters
key K: key with which the specified value is associated
oldValue V: value expected to be associated with the specified key
newValue V: value to be associated with the specified key
Returns
boolean true if the value was replaced

replace

Added in API level 24
V replace (K key, 
                V value)

仅当指定键的条目映射到某个值时才替换该条目。

Parameters
key K: key with which the specified value is associated
value V: value to be associated with the specified key
Returns
V the previous value associated with the specified key, or null if there was no mapping for the key. (A null return can also indicate that the map previously associated null with the key, if the implementation supports null values.)

replaceAll

Added in API level 24
void replaceAll (BiFunction<? super K, ? super V, ? extends V> function)

用对该条目调用给定函数的结果替换每个条目的值,直到处理完所有条目或者该函数抛出异常。 函数抛出的异常会传递给调用者。

Parameters
function BiFunction: the function to apply to each entry

size

Added in API level 1
int size ()

返回此散列表中的键的数量。

Returns
int the number of keys in this hashtable.

toString

Added in API level 1
String toString ()

以一组条目形式返回此Hashtable对象的字符串表示形式,并用大括号括起来,并用ASCII字符“ ”(逗号和空格)分隔。 每个条目呈现为密钥,等号=和关联元素,其中使用toString方法将密钥和元素转换为字符串。

Returns
String a string representation of this hashtable

values

Added in API level 1
Collection<V> values ()

返回此映射中包含的值的Collection视图。 该集合由地图支持,因此地图的更改会反映在集合中,反之亦然。 如果在对集合进行迭代的过程中修改了映射(除了通过迭代器自己的remove操作),迭代的结果是未定义的。 该collection支持元素移除,即从映射中相应的映射,经由Iterator.remove,Collection.remove,removeAll,retainAll clear和操作。 它不支持addaddAll操作。

Returns
Collection<V> a collection view of the values contained in this map

Protected methods

rehash

Added in API level 1
void rehash ()

增加散列表的容量并在内部重新组织,以便更有效地容纳和访问条目。 当散列表中的键数超过散列表的容量和加载因子时,将自动调用此方法。

Hooray!