HashMap与HashTable的区别

来源:互联网 发布:新时代电话软件 编辑:程序博客网 时间:2024/05/20 07:14

HashMap与HashTable的区别

Hashtable和HashMap类有三个重要的不同之处。

1)Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。

2)最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是。这就意味着,虽然你可以在一个多线程的应用程序中用一个Hashtable,不需要自己为它的方法实现同步;而当多个线程访问一个HashMap时,你必须为HashMap提供外同步。一个方便的方法就是利用Collections类的静态synchronizedMap()方法,它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的HashMap。这么做的结果就是当你不需要同步时,你不能切断Hashtable中的同步(比如在一个单线程的应用程序中),而且同步增加了很多处理费用。

3)只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,那么get()将返回null。如果有必要,用containKey()方法来区别这两种情况。

一些资料建议,当需要同步时,用Hashtable,反之用HashMap。但是,因为在需要时,HashMap可以被同步,HashMap的功能比Hashtable的功能更多,而且它不是基于一个陈旧的类的,所以有人认为,在各种情况下,HashMap都优先于Hashtable。

从JDK1.5以后,在需要同步的时候可以用ConcurrentHashMap。


HashMap与ConcurrentHashMap的区别
http://www.2cto.com/kf/201411/349899.html
0 0
原创粉丝点击