一、简介及相同点
1、产生时期
Hashtable是Java最早版本(JDK1.0)就发布的一种提供键值映射(Key-Value)
的数据类型,而HashMap产生于JDK1.2。
虽然Hashtable比HashMap出现的早一些,但是现在Hashtable基本上已经被弃用了。而HashMap已经成为应用最为广泛的一种数据类型了。造成这样的原因一方面是因为Hashtable是线程安全的,效率比较低。另外Hashtable没有遵循驼峰命名法,不是HashTable(次要原因)
2、简介(区别中都有详细介绍)
(1)Hashtable是基于哈希表实现的,每个元素是一个Key-Value键值对,其内部也是通过单链表解决冲突问题,容量不足(超过了阈yù值,默认是11)时,同样会自动增长(下面会详细介绍).
(2)HashMap在JDK1.7及其之前实现都是哈希表(也叫哈希数组)+ 链表(解决hash冲突)
,JDK1.8及之后引入了红黑树
。引入红黑树是为了提高查询数据的效率(数据增多会使链表的查询效率越来越低)。那么什么时候将链表转换为红黑树呢?
链表转换为红黑树的两个条件:首先得要求当前链表长度要大于 8 ,并且要求桶(哈希数组)的长度大于 64,此时才会变为红黑树,不然只会进行扩容。
(3)这两者都实现了Map、Cloneable(可复制)、Serializable(可序列化)
这三个接口。另外:HashMap 和 Hashtable 都来自 java.Util 工具包
3、相同点
(1)存储结构相同
:都是用哈希表来存储数据的;
(2)解决hash冲突方案相同
:都是用链表来解决的。
①通过Key-Value和一种哈希算法得到hashCode,再通过hashCode作位运算以此数作为哈希表的下标位置(JDK 1.8思路)。
②当计算出来的下标位置相同(专业术语叫hash冲突)时,就会调用当前要插入元素的 equals 方法与已经存在的元素进行一对一的比较。