简单总结~
- 相同点:
- 都是java.util包下的类。
- 都实现了Map接口,存储方式都是key-value形式。
- 都实现了Serializable和Cloneable接口。
- 负载因子都是0.75。
- 部分方法都相同,如put、remove等方法。
- 不同点:
- HashMap是非线程安全的;HashTable是线程安全的(相关方法被synchronized关键字修饰)。
- HashMap允许null作为键或值;HashTable不允许,运行时会报NullPointerException空指针异常。
- HashMap和HashTable底层结构是数组+链表(jdk1.7版本及之前),不过在jdk1.8版本之后,HashMap增加了一个新的结构叫做红黑树(链表元素长度超过8个,自动会转变成红黑树)。
- HashMap初始容量为16,HashTable初始容量为11.
- HashMap扩容是当前容量的翻倍,HashTable是当前容量的翻倍+1。
- HsahMap只支持Iterator遍历,Hashtable支持Iterator和Enumeration。
- HsahMap与Hashtable的部分方法不同,比如Hashtable有contains方法。