HashMap与Hashtable的比较

HashMap不是线程安全的,效率高

  • HashMap是Map接口的子类,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而Hashtable不允许。

Hashtable是线程安全

  • HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。

  • HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。 HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。

  • 最大的不同是,Hashtable的方法是synchronized的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差别

表格总结

安全性 键值 效率 是否同步 包含方法 jdk版本 关系
HashMap 线程不安全 允许有null的键和值 效率高一点 方法不是Synchronize的要提供外同步 有containsValue和containsKey方法 HashMap 是Java1.2 引进的Map interface 的一个实现 HashMap是Hashtable的轻量级实现
Hashtable 线程安全 不允许有null的键和值 效率稍低 方法是是Synchronize的 有contains、containsKey和containsValue方法 Hashtable 继承于Dictionary 类,JDK1.0版本 Hashtable 比HashMap 要旧

参考文档:
1. http://www.cnblogs.com/langtianya/archive/2013/03/19/2970273.html

猜你喜欢

转载自blog.csdn.net/thebigdipperbdx/article/details/81237321