HashMap与Hashtable都实现了Map接口。
Hashtable在一开始便有了,而HashMap在JDK1.2后才出现。
它们主要区别:
1、线程安全性
Hashtable是线程安全的,它的每一个方法都是同步(synchronize)的。在多线程中我们可以直接使用Hashtable,多个线程可以共享Hashtable,而不需要我们来给它创建同步;
HashMap不是线程安全的,在多线程状态下,可能会产生死锁的状态,当然你也可以自己创建同步(synchronize)。
2、接受null值
Hashtable是不接受键值(key)和值(value)为null的;
而HashMap恰恰与上面相反。
3、对外提供的方法
Hashtable比HashMap多提供 elments() 和 contains() 两个方法。
4、容量
Hashtable初始容量为11,每次扩充容量会变成原来的两倍 1;
HashMap初始容量为16,每次扩充容量会变成原来的两倍。
5、迭代器
HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。
所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。