Java Hashtable类
哈希表(Hashtable)是原来的java.util中的一部分,是一个字典的具体实现。
然而,Java2重新设计的哈希表,以便它也实现了Map接口。因此,哈希表现已集成到集合框架。它类似于HashMap,但保持线程同步。
HashMap一样,在一个哈希表哈希表存储键/值对。当使用一个哈希表,您可以指定一个对象,它被用作一个键,要链接到该键的值。该键散列并将得到的散列码用作在该值被存储在表中的索引。
Hashtable中定义了四个构造函数。第一个版本是默认的构造函数:
Hashtable( )
第二个版本会创建一个哈希表,该表具有由size指定的初始大小:
Hashtable(int size)
第三个版本创建一个哈希表,该表具有规模和fillRatio指定的填充比指定的初始大小。
ratio 必须在0.0和1.0之间,它决定如何充分哈希表可以是之前它被向上调整大小。
Hashtable(int size, float fillRatio)
第四个版本,创建一个与m中的元素初始化一个哈希表。
哈希表的容量被设置为在m个元素的数目的两倍。 0.75默认加载使用。
Hashtable(Map m)
除了由Map接口中定义的方法,哈希表定义了以下方法:
SN | 方法及描述 |
---|---|
1 |
void clear( ) 复位和清空哈希表。 |
2 |
Object clone( ) 返回调用对象的一个副本。 |
3 |
boolean contains(Object value) 如果一些值等于值在哈希表中存在的值,则返回true。如果没有找到该值,返回false。 |
4 |
boolean containsKey(Object key) 如果一些键等于存在于哈希表中的key,则返回true。如果没有找到键,返回false。 |
5 |
boolean containsValue(Object value) 如果一些值等于哈希表中存在的值,则返回true。返回false,如果没有找到该值。 |
6 |
Enumeration elements( ) 返回包含在哈希表中的值的枚举。 |
7 |
Object get(Object key) 返回包含与key关联的值的对象。如果键不在哈希表中,则返回一个空对象。 |
8 |
boolean isEmpty( ) 如果哈希表是空的返回true,如果它至少包含一个键返回false。 |
9 |
Enumeration keys( ) 返回包含在哈希表中的键的枚举。 |
10 |
Object put(Object key, Object value) 插入一个键和一个值到哈希表中。返回null,如果key不在哈希表中,如果键已经在哈希表中,返回与key相关联的先前值。 |
11 |
void rehash( ) 增加了hash表的大小和改作它的所有键。 |
12 |
Object remove(Object key) 删除键和它的值。返回与key相关联的值。如果键不在哈希表中,则返回一个空对象。 |
13 |
int size( ) 返回哈希表中的条目的编号。 |
14 |
String toString( ) 返回字符串相当于一个哈希表。 |
例子:
下面的程序说明了几个通过这种数据结构支持的方法:
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