Java哈希表示例
Hashtable实现一个哈希表(顾名思义),并将键映射到值(比如LinkedHashMap)。Hashtable类允许将非null对象用作键或者值。与HashMap一样,Hashtable有两个影响其性能的参数:初始容量和负载因子。capacity是哈希表中bucket的数量,而初始容量是哈希表创建时的容量。负载因子是衡量哈希表在容量自行增加之前可以达到的完整程度的度量。
它是如何工作的?
哈希表使用一个哈希函数,其目的是将索引计算到一个插槽(或者桶)数组中,从中可以找到正确的值。
哈希表工作流
优势
查找的平均成本与表中存储的元素数无关。
允许任意插入和删除键值对。
在许多搜索树或者其他表的情况下更有效。
哈希表中的构造函数摘要
Hashtable():构造一个具有默认初始容量(11)(与HashMap或者LinkedHashMap不同)和加载因子(0.75)的新哈希表。
Hashtable(intinitialcapacity):构造一个具有指定容量和默认加载因子(0.75)的新哈希表。
Hashtable(intinitialcapacity,float loadFactor):构造具有指定容量和指定加载因子的新哈希表。
哈希表(Map<?扩展K?extends V>t):用与给定映射相同的映射构造一个新的哈希表。
哈希表类中的方法
void clear:清除删除/删除所有键/值对的当前哈希表。
Object clone():创建此哈希表的浅副本。
V contains(Object value):测试当前值是否映射到哈希表中的任何键。
boolean containsKey(Object key):测试哈希表中是否存在指定的键。
boolean containsValue(Object value):测试指定值是否映射到哈希表中的任何键。
boolean equals(Object o):比较指定对象与此映射的相等性。
V get(Object key):返回键映射到的值,如果该表/映射不包含该键的映射,则返回null。
int hashCode():根据map接口中的定义返回此表/映射的哈希代码值。
boolean isEmpty():测试哈希表是否没有将键映射到值。
V put(K键,V值):将指定值映射到指定键。
V remove(Object key):从哈希表中删除指定的键。
V replace(K key,V value):仅当指定键当前映射到某个值时才替换该项。
int size():返回哈希表中的键数。
有关Hashtable类的主要方法的更多信息,请访问原始的Oracle文档。
移除哈希表中的所有键并克隆哈希表
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, "theitroad"); 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); } }
输出
values in clone: {1="theitroad", 2="dot", 3="net"} after clearing: {}