码迷,mamicode.com
首页 > 其他好文 > 详细

浅析HashMap和Hashtable的区别

时间:2017-06-27 13:51:26      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:ext   clone   code   保存   分享   并且   tab   区别   shm   

HashMap和Hashtable两个类都实现了Map接口,二者保存键值对(key-value对);

HashMapHashTable区别

第一,继承的父类不同。
HashMap继承自AbstractMap类,而Hashtable继承自Dictionary类,HashMap是Hashtable的轻量级实现(非线程安全的实现),二者都实现了Map接口。

public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable{}

public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable {}

第二,线程安全性不同。
HashMap中的方法是非同步的,而Hashtable 中的方法是同步的。在多线程并发的环境下,可以直接使用Hashtable,不需要自己为它的方法实现同步,为了使线程安全我们使用HashMap时就必须要自己增加同步处理。HashMap的同步问题可通过Collections的一个静态方法得到解决:
Map Collections.synchronizedMap(Map m)
这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。 
由于HashMap是线程不同步(线程不安全)的,所以效率要高于HashTable. 

第三,是否提供contains方法
HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey。

技术分享

 

Hashtable则保留了contains,containsValue和containsKey三个方法,其中contains和containsValue功能相同。

技术分享

 

第四,key和value是否允许null值。
其中key和value都是对象,并且不能包含重复key,但可以包含重复的value。
Hashtable中,key和value都不允许出现null值。
HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,可能是 HashMap中没有该键,也可能使该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。

 

浅析HashMap和Hashtable的区别

标签:ext   clone   code   保存   分享   并且   tab   区别   shm   

原文地址:http://www.cnblogs.com/kevinZhu/p/7084637.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!