浅析Java中Map与HashMap,Hashtable,HashSet的区别

来源:互联网 发布:儿童学编程的害处 编辑:程序博客网 时间:2024/05/17 20:24

浅析Java中Map与HashMap,Hashtable,HashSet的区别

作者: 字体:[增加 减小] 类型:转载
HashMap和Hashtable两个类都实现了Map接口,二者保存K-V对(key-value对);HashSet则实现了Set接口,性质类似于集合
<iframe id="cproIframe_u1892994_2" width="580" height="90" src="http://pos.baidu.com/acom?adn=3&amp;at=231&amp;aurl=&amp;cad=1&amp;ccd=24&amp;cec=GBK&amp;cfv=17&amp;ch=0&amp;col=zh-CN&amp;conBW=0&amp;conOP=1&amp;cpa=1&amp;dai=2&amp;dis=0&amp;ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D7n36k5wrcp261b43rqwQT3zi6juUMqOv4qXrJiBk7csd7pMoeo6gSq2QeHAszajW%26wd%3D%26eqid%3Ddeb532ae0000bb880000000555a5fd78&amp;ltu=http%3A%2F%2Fwww.jb51.net%2Farticle%2F41077.htm&amp;lu_161=0&amp;lunum=6&amp;n=jb51_cpr&amp;pcs=1221x734&amp;pis=10000x10000&amp;ps=514x145&amp;psr=1440x900&amp;pss=1221x515&amp;qn=698686429efccd00&amp;rad=&amp;rsi0=580&amp;rsi1=90&amp;rsi5=4&amp;rss0=%23FFFFFF&amp;rss1=%23F7FCFF&amp;rss2=%230000ff&amp;rss3=%23444444&amp;rss4=%23008000&amp;rss5=&amp;rss6=%23e10900&amp;rss7=&amp;scale=&amp;skin=tabcloud_skin_3&amp;stid=5&amp;td_id=1892994&amp;titFF=%E5%AE%8B%E4%BD%93&amp;titFS=12&amp;titTA=left&amp;tn=text_default_580_90&amp;tpr=1436941691719&amp;ts=1&amp;version=2.0&amp;xuanting=0&amp;dtm=BAIDU_DUP2_SETJSONADSLOT&amp;dc=2&amp;di=u1892994&amp;ti=%E6%B5%85%E6%9E%90Java%E4%B8%ADMap%E4%B8%8EHashMap%2CHashtable%2CHashSet%E7%9A%84%E5%8C%BA%E5%88%AB_java_%E8%84%9A%E6%9C%AC%E4%B9%8B%E5%AE%B6&amp;tt=1436941691696.358.607.607" align="center,center" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true"></iframe>

HashTable和HashMap区别

第一,继承的父类不同。
Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。

复制代码代码如下:

public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, Serializable

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


第二,线程安全性不同。
Hashtable 中的方法是Synchronize的,而HashMap中的方法在缺省情况下是非Synchronize的。在多线程并发的环境下,可以直接使用Hashtable,不需要自己为它的方法实现同步,但使用HashMap时就必须要自己增加同步处理。

第三,是否提供contains方法
HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey,因为contains方法容易让人引起误解。

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()方法来判断。

第五,两个遍历方式的内部实现上不同。
Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。

第六,hash值不同。
哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值。

第七,内部实现使用的数组初始化和扩容方式不同。
Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。

HashMap中hash数组的默认大小是16,而且一定是2的指数。

您可能感兴趣的文章:

  • javascript实现的HashMap类代码
  • java无锁hashmap原理与实现详解
  • java HashMap通过value反查key的代码示例
  • JAVA HashMap详细介绍和示例
  • Java中HashMap和Hashtable及HashSet的区别
  • 浅析java中ArrayList与Vector的区别以及HashMap与Hashtable的区别
  • java HashMap的keyset实例
  • java中Hashtable和HashMap的区别分析
  • Java中HashMap和TreeMap的区别深入理解
  • Java中对HashMap的深度分析
  • Android中实现HashMap排序的方法
0 0
原创粉丝点击