- Hashtable 是一个散列表,它存储的内容是键值对(key-value)映射
- Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口
- Hashtable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为null
- 与HashMap不同的是Hashtable是继承Dictionary,实现了Map接口
- Map是"key-value键值对"接口,Dictionary是声明了操作"键值对"函数接口的抽象类
第三个构造函数:
(1)table是一个Entry[]数组类型,而Entry实际上就是一个单向链表。哈希表的"key-value键值对"都是存储在Entry数组中的。
(2)count是Hashtable的大小,它是Hashtable保存的键值对的数量。
(3)threshold是Hashtable的阈值,用于判断是否需要调整Hashtable的容量。threshold的值="容量*加载因子"。
(4)loadFactor就是加载因子。
(5)modCount是用来实现fail-fast机制的
put 方法
- Hashtable中的key和value是不允许为空的
-
当我们想要想Hashtable中添加元素的时候,首先计算key的hash值,然后通过hash值确定在table数组中的索引位置,最后将value值替换或者插入新的元素,如果容器的数量达到阈值,就会进行扩充
get 方法
- 同样也是先获得索引值,然后进行遍历,最后返回
Hashtable和HashMap到底有哪些不同呢:
- 基类不同:HashTable基于Dictionary类,而HashMap是基于AbstractMap
- Dictionary是什么?它是任何可将键映射到相应值的类的抽象父类
- 而AbstractMap是基于Map接口的骨干实现,它以最大限度地减少实现此接口所需的工作
- null不同:HashMap可以允许存在一个为null的key和任意个为null的value,但是HashTable中的key和value都不允许为null
- 线程安全:HashMap时单线程安全的,Hashtable是多线程安全的
- 遍历不同:HashMap仅支持Iterator的遍历方式,Hashtable支持Iterator和Enumeration两种遍历方式