可以从7个方面来回答这个问题:
1、继承的父类不同。HashMap 继承自 AbstractMap,而 Hashtable 是继承自 Dictionary。
2、对外提供的接口不同。Hashtable 比 HashMap 多提供了 elments() 和 contains() 两个方法。
3、对 null key 和 null value 的支持不同。Hashtable 既不支持 null key,也不支持 null value。而 HashMap 中,null 可以作为键,但只能有一个key是null,可以有多个value为 null。
4、线程安全性不同。Hashtable 是线程安全的,HashMap 不是。
5、内部遍历方式的不同。Hashtable、HashMap都使用了 Iterator 迭代器来遍,Hashtable 使用的是 Enumeration 的方式。
6、初始容量大小和每次扩充容量大小的不同。Hashtable 默认的初始大小为11,之后每次扩容,容量变为原来的 2倍加1。HashMap默认的初始化大小为16,之后每次扩容,容量变为原来的 2 倍。
7、计算hash值的方法不同,Hashtable直接使用对象的hashCode,HashMap为了提高计算效率,将哈希表的大小固定为了2的幂。