此类实现一个哈希表,该表将键映射到值。任何非null 对象都可以用作键或值
若要成功存储和检索哈希表中的对象,用作键的对象必须实现 hashCode 方法和 equals 方法。
Hashtable实例有两个影响其性能的参数:初始容量和负载系数。容量是哈希表中的存储桶数量,初始容量只是创建哈希表时的容量。请注意,哈希表是打开的:在“哈希冲突”的情况下,单个存储桶存储多个条目,必须按顺序搜索这些条目。负载因子是衡量哈希表在容量自动增加之前允许的满量。初始容量和负载系数参数只是实施的提示。关于何时以及是否调用 rehash 方法的确切细节取决于实现。
通常,默认负载系数 (.75) 在时间和空间成本之间提供了良好的权衡。较高的值会减少空间开销,但会增加查找条目的时间成本(这反映在大多数 Hashtable 操作中,包括 get 和 put)。
初始容量控制了浪费的空间和操作需求rehash之间的权衡,这非常耗时。如果初始容量大于哈希表将包含的最大条目数除以其负载因子,则不会发生任何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); 
}

由此类的所有“集合视图方法”返回的集合的迭代器方法返回的迭代器是快速失败的:如果在创建迭代器后的任何时间对 Hashtable 进行结构修改,则迭代器将抛出 . ConcurrentModificationException因此,在面对并发修改时,迭代器会快速而干净地失败,而不是冒着在未来不确定的时间出现任意的、非确定性行为的风险。Hashtable 的 keys 和 elements 方法返回的枚举不是快速失败的。
请注意,无法保证迭代器的快速失效行为,因为一般来说,在存在不同步的并发修改的情况下,不可能做出任何硬性保证。快速失败迭代器会尽力而为地抛出 ConcurrentModificationException 。因此,编写一个依赖于此异常的程序的正确性是错误的: 迭代器的快速失败行为应该只用于检测错误。
从 Java 2 平台 v1.2 开始,该类被改造为实现该 Map 接口,使其成为 Java 集合框架的成员。与新的集合实现不同, Hashtable 是同步的。如果不需要线程安全实现,建议用 HashMap 代替 Hashtable如果需要线程安全的高度并发实现,则建议使用 java.util.concurrent.ConcurrentHashMap Hashtable代替 。