HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。 Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。
Hashtable它是线程安全的,支持多线程。 而HashMap它不是线程安全的。
HashMap的key、value都可以为null。 Hashtable的key、value都不可以为null。
HashMap只支持Iterator(迭代器)遍历。 而Hashtable支持Iterator(迭代器)和Enumeration(枚举器)两种方式遍历。
HashMap是“从前向后”的遍历数组;再对数组具体某一项对应的链表,从表头开始进行遍历。 Hashtable是“从后往前”的遍历数组;再对数组具体某一项对应的链表,从表头开始进行遍历。
HashMap默认的容量大小是16;增加容量时,每次将容量变为“原始容量x2”。 Hashtable默认的容量大小是11;增加容量时,每次将容量变为“原始容量x2 + 1”。
HashMap添加元素时,是使用自定义的哈希算法。 Hashtable没有自定义哈希算法,而直接采用的key的hashCode()。
Hashtable支持contains(Object value)方法,而且重写了toString()方法; 而HashMap不支持contains(Object value)方法,没有重写toString()方法。