位置:首页 > Java技术 > Java基础教程 > Java Hashtable类

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