# Java Hashtable 接口
Hashtable是原始的java.util的一部分, 是一个Dictionary具体的实现 。
然而,Java 2 重构的Hashtable实现了Map接口,因此,Hashtable现在集成到了集合框架中。它和HashMap类很相似,但是它支持同步。
像HashMap一样,Hashtable在哈希表中存储键/值对。当使用一个哈希表,要指定用作键的对象,以及要链接到该键的值。
然后,该键经过哈希处理,所得到的散列码被用作存储在该表中值的索引。
Hashtable定义了四个构造方法。第一个是默认构造方法:
```
Hashtable()
```
第二个构造函数创建指定大小的哈希表:
```
Hashtable(int size)
```
第三个构造方法创建了一个指定大小的哈希表,并且通过fillRatio指定填充比例。
填充比例必须介于0.0和1.0之间,它决定了哈希表在重新调整大小之前的充满程度:
```
Hashtable(int size,float fillRatio)
```
第四个构造方法创建了一个以M中元素为初始化元素的哈希表。
哈希表的容量被设置为M的两倍。
```
Hashtable(Map m)
```
Hashtable中除了从Map接口中定义的方法外,还定义了以下方法:
| **方法** | **描述** |
| --- | --- |
| **void clear( )** | 将此哈希表清空,使其不包含任何键。 |
| **Object clone( )** | 创建此哈希表的浅表副本。 |
| **boolean contains(Object value)** | 测试此映射表中是否存在与指定值关联的键。 |
| **boolean containsKey(Object key)** | 测试指定对象是否为此哈希表中的键。 |
| **boolean containsValue(Object value)** | 如果此 Hashtable 将一个或多个键映射到此值,则返回 true。 |
| **Enumeration elements( )** | 返回此哈希表中的值的枚举。 |
| **Object get(Object key)** | 返回指定键所映射到的值,如果此映射不包含此键的映射,则返回 null. 更确切地讲,如果此映射包含满足 (key.equals(k)) 的从键 k 到值 v 的映射,则此方法返回 v;否则,返回 null。 |
| **boolean isEmpty( )** | 测试此哈希表是否没有键映射到值。 |
| **Enumeration keys( )** | 返回此哈希表中的键的枚举。 |
| **Object put(Object key, Object value)** | 将指定 key 映射到此哈希表中的指定 value。 |
| **void rehash( )** | 增加此哈希表的容量并在内部对其进行重组,以便更有效地容纳和访问其元素。 |
| **Object remove(Object key)** | 从哈希表中移除该键及其相应的值。 |
| **int size( )** | 返回此哈希表中的键的数量。 |
| **String toString( )** | 返回此 Hashtable 对象的字符串表示形式,其形式为 ASCII 字符 ", " (逗号加空格)分隔开的、括在括号中的一组条目。 |
### 实例
下面的程序说明这个数据结构支持的几个方法:
```
import java.util.*;
public class HashTableDemo {
public static void main(String args[]) {
// Create a hash map
Hashtable balance = new Hashtable();
Enumeration names;
String str;
double bal;
balance.put("Zara", new Double(3434.34));
balance.put("Mahnaz", new Double(123.22));
balance.put("Ayan", new Double(1378.00));
balance.put("Daisy", new Double(99.22));
balance.put("Qadir", new Double(-19.08));
// Show all balances in hash table.
names = balance.keys();
while(names.hasMoreElements()) {
str = (String) names.nextElement();
System.out.println(str + ": " +
balance.get(str));
}
System.out.println();
// Deposit 1,000 into Zara's account
bal = ((Double)balance.get("Zara")).doubleValue();
balance.put("Zara", new Double(bal+1000));
System.out.println("Zara's new balance: " +
balance.get("Zara"));
}
}
```
以上实例编译运行结果如下:
```
Qadir: -19.08
Zara: 3434.34
Mahnaz: 123.22
Daisy: 99.22
Ayan: 1378.0
Zara's new balance: 4434.34
```
- Java 基础
- Java 简介
- Java开发环境配置
- Java基础语法
- Java对象和类
- Java基本数据类型
- Java变量类型
- Java修饰符
- Java运算符
- Java循环结构 - for, while 及 do...while
- Java分支结构 - if...else/switch
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 面向对象
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 接口
- Java 包(package)
- Java 高级教程
- Java 数据结构
- Java Enumeration接口
- Java Bitset类
- Java Vector 类
- Java Stack 类
- Java Dictionary 类
- Java Hashtable 接口
- Java Properties 接口
- Java 集合框架
- Java 泛型
- Java序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Servlet 教程
- Servlet 简介
- Servlet 环境设置
- Servlet 生命周期
- Servlet 实例
- Servlet 表单数据
- Servlet 客户端 HTTP 请求
- Servlet 服务器 HTTP 响应
- Servlet HTTP 状态码
- Servlet 编写过滤器
- Servlet 异常处理
- Servlet Cookies 处理
- Servlet Session 跟踪
- Servlet 数据库访问
- Servlet 文件上传
- Servlet 处理日期
- Servlet 网页重定向
- Servlet 点击计数器
- Servlet 自动刷新页面
- Servlet 发送电子邮件
- Servlet 包
- Servlet 调试
- Servlet 国际化
- JSP 基础
- JSP 简介
- JSP 开发环境搭建
- JSP 结构
- JSP 生命周期
- JSP 语法
- JSP 指令
- JSP 动作元素
- JSP 动作元素
- JSP 隐含对象
- JSP 客户端请求
- JSP 服务器响应
- JSP HTTP 状态码
- JSP 表单处理
- JSP 过滤器
- JSP Cookies 处理
- JSP Session
- JSP 文件上传
- JSP 日期处理
- JSP 页面重定向
- JSP 点击量统计
- JSP 自动刷新
- JSP 发送邮件
- JSP 高级教程
- JSP 标准标签库(JSTL)
- JSP 连接数据库
- JSP XML 数据处理
- JSP JavaBean
- JSP 自定义标签
- JSP 表达式语言
- JSP 异常处理
- JSP 调试
- JSP 国际化
- 免责声明