72.md 3.9 KB
Newer Older
W
wizardforcel 已提交
1
# Java `Hashtable`示例
W
init  
wizardforcel 已提交
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

> 原文: [https://javatutorial.net/java-hashtable-example](https://javatutorial.net/java-hashtable-example)

Hashtable 实现一个哈希表(顾名思义),并将键映射到值(例如 [LinkedHashMap](https://javatutorial.net/java-linkedhashmap-example) )。 Hashtable 类允许将非 null 对象用作键或值。 就像 [HashMap](https://javatutorial.net/java-hashmap-example) 一样,Hashtable 有两个影响其性能的参数:初始容量和负载因子。 容量是哈希表中存储桶的数量,初始容量是创建哈希表时存在的容量。 负载因子是在容量自身增加之前允许哈希表获得多大容量的度量。

![java-featured-image](img/e0db051dedc1179e7424b6d998a6a772.jpg)

## 它是如何工作的?

哈希表使用哈希函数,其目的是计算到插槽(或存储桶)数组中的索引,从中可以找到正确的值。

![Hashtable workflow](img/c0ec72090a00ac344f096f363e6b8cf0.jpg)

哈希表工作流程

## 好处

*   平均查找成本与表中存储的元素数量无关。
*   允许任意插入和删除键值对。
*   在许多情况下搜索树或任何其他表时效率更高。

W
wizardforcel 已提交
23
## `Hashtable`中的构造方法摘要
W
init  
wizardforcel 已提交
24 25 26 27 28 29

1.  Hashtable():构造一个具有默认初始容量(11)(与 HashMap 或 LinkedHashMap 不同)和负载因子(0.75)的新哈希表。
2.  Hashtable(int initialCapacity):构造一个具有指定容量和默认负载因子(0.75)的新哈希表。
3.  Hashtable(int initialCapacity,float loadFactor):构造一个具有指定容量和指定负载因子的新哈希表。
4.  哈希表(Map <?扩展 K,?扩展 V > t):使用与给定 Map 相同的映射构造一个新的哈希表。

W
wizardforcel 已提交
30
## `Hashtable`类中的方法
W
init  
wizardforcel 已提交
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

1.  void clear:清除当前哈希表,该哈希表删除/删除所有键/值对。
2.  对象 clone():创建此哈希表的浅表副本。
3.  V contains(Object value):测试当前值是否映射到哈希表中的任何键。
4.  boolean containsKey(Object key):测试哈希表中是否存在指定的键。
5.  boolean containsValue(Object value):测试指定的值是否映射到哈希表中的任何键。
6.  boolean equals(Object o):将指定的 Object 与该 Map 比较是否相等。
7.  V get(Object key):返回键所映射到的值;如果此表/映射不包含键的映射关系,则返回 null。
8.  int hashCode():根据 Map 接口中的定义,返回此表/地图的哈希码值。
9.  boolean isEmpty():测试哈希表是否没有键映射到值。
10.  V put(K 键,V 值):将指定的值映射到指定的键。
11.  V remove(Object key):从此哈希表中删除指定的键。
12.  V replace(K 键,V 值):仅当当前映射到某个值时,才替换指定键的条目。
13.  int size():返回此哈希表中的键数。

有关 Hashtable 类的主要方法的更多信息,请随时访问原始 [Oracle 文档](https://docs.oracle.com/javase/8/docs/api/java/util/Hashtable.html)

W
wizardforcel 已提交
48
### 从`Hashtable`中删除所有键并克隆`Hashtable`
W
init  
wizardforcel 已提交
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82

```java
import java.util.*; 
class HashTableExample { 
    public static void main(String[] arg) 
    { 
        Hashtable<Integer, String> hashTable = 
                      new Hashtable<Integer, String>(); 

        Hashtable<Integer, String> hashTableCopy = 
                      new Hashtable<Integer, String>(); 

        hashTable.put(1, "javatutorial"); 
        hashTable.put(2, "dot"); 
        hashTable.put(3, "net"); 

        // create a clone of hashtable 'hashTable'
        hashTableCopy= (Hashtable<Integer, String>)hashTable.clone(); 

        System.out.println("values in clone: " + hashTableCopy); 

        hashTable.clear(); 

        System.out.println("after clearing: " + hashTable); 
    } 
}
```

**输出:**

```java
values in clone: {1="javatutorial", 2="dot", 3="net"}
after clearing: {}
```