HashMap是Hashtable的轻量级实现,都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,在只有一个线程访问的情况下,效率要高于Hashtable.
不同点:
1、Hashtable是synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须自己提供外同步方法
2、HashMap允许将null作为key值或value值,而Hashtable不允许
3、HashMap把Hashtable的contains方法去掉了,改成了containsValue和containsKey,因为contains容易让人误解
4、Hashtable继承自Dictionary类,而hashMap是Java1.2引进的Map interface的一个实现
HashMap和Hashtable采用的hash/rehash算法大都一样,性能上不会有太大的差异
补充:
解释一下为什么hashtable的contains的方法容易让人误解?
Hashtable继承Map接口,contains(Object value) 测试此映射表中是否存在与指定值关联的键(如果此hashtable将一个或多个键映射到此值,则返回true)
主要用于判断容器中是否有此值,但contains并非和containsKey的功能一致,而是和containsValue的功能等同,之所以说是等同,原因是需要实现Map中的containsvalue:
public boolean containsValue(Object value){
return contains(value);
}