HashMap和Hashtable的区别
-
HashMap和Hashtable都实现了Map接口,很多特性非常相似,有以下不同点:
-
HashMap允许键和值是null,Hashtable不允许键或者值是null
-
Hashtable是同步的,HashMap不是
Hashtable内部很多方法被Synchronized关键字修饰
public synchronized int size() {
return count;
}
public synchronized boolean isEmpty() {
return count == 0;
}
- HashMap更适用于单线程环境,而Hashtable适合于多线程环境
- HashMap提供了可供应用迭代的键的集合,因此,HashMap是快速失败的(fail-fast)。
- Hashtable提供了对键的列举Enumeration。
一般认为Hashtable是一个遗留的类(内部实现很多没有优化和冗余),多线程情况下有同步的ConcurrentHashMap替代,没有必要因为多线程使用Hashtable。
因为线程安全问题,HashMap效率比Hashtable高。