• Java 数据结构教程

Java 数据结构 - 哈希表类



哈希表是一种以关联方式存储数据的数据结构。在哈希表中,数据以数组格式存储,每个数据值都有其自身的唯一索引值。如果知道所需数据的索引,则访问数据变得非常快。

因此,它成为一种数据结构,其中插入和搜索操作非常快,而不管数据的大小如何。哈希表使用数组作为存储介质,并使用哈希技术生成要插入元素或从中定位元素的索引。

Java 的哈希表类

Hashtable 是最初的 java.util 的一部分,是 Dictionary 的具体实现。

但是,Java 2 重新设计了 Hashtable,使其也实现了 Map 接口。因此,Hashtable 现在已集成到集合框架中。它类似于 HashMap,但它是同步的。

与 HashMap 一样,Hashtable 在哈希表中存储键/值对。使用 Hashtable 时,您指定用作键的对象以及您希望与该键链接的值。然后对键进行哈希处理,生成的哈希码用作在表中存储值的索引。

以下是 Hashtable 类提供的构造函数列表。

序号 构造函数和描述
1

Hashtable( )

这是哈希表的默认构造函数,它实例化 Hashtable 类。

2

Hashtable(int size)

此构造函数接受一个整数参数,并创建一个哈希表,其初始大小由整数 value size 指定。

3

Hashtable(int size, float fillRatio)

这将创建一个哈希表,其初始大小由 size 指定,填充率由 fillRatio 指定。此比率必须介于 0.0 和 1.0 之间,它决定哈希表在向上调整大小之前可以有多满。

4

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

这将使用给定的映射构造一个 Hashtable。

除了 Map 接口定义的方法外,Hashtable 还定义了以下方法

序号 方法和描述
1

void clear( )

重置并清空哈希表。

2

Object clone( )

返回调用对象的副本。

3

boolean contains(Object value)

如果哈希表中存在某个等于 value 的值,则返回 true。如果未找到该值,则返回 false。

4

boolean containsKey(Object key)

如果哈希表中存在某个等于 key 的键,则返回 true。如果未找到该键,则返回 false。

5

boolean containsValue(Object value)

如果哈希表中存在某个等于 value 的值,则返回 true。如果未找到该值,则返回 false。

6

Enumeration elements( )

返回哈希表中包含的值的枚举。

7

Object get(Object key)

返回包含与 key 关联的值的对象。如果键不在哈希表中,则返回 null 对象。

8

boolean isEmpty( )

如果哈希表为空,则返回 true;如果它包含至少一个键,则返回 false。

9

Enumeration keys( )

返回哈希表中包含的键的枚举。

10

Object put(Object key, Object value)

将键和值插入哈希表。如果键不在哈希表中,则返回 null;如果键已在哈希表中,则返回与键关联的先前值。

11

void rehash( )

增加哈希表的大小并重新哈希其所有键。

12

Object remove(Object key)

删除键及其值。返回与键关联的值。如果键不在哈希表中,则返回 null 对象。

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
广告