详解java HashMap和HashTable的区别

来源:爱站网时间:2019-07-26编辑:网友分享
HashMap和Hashtable的在Java中用来测试程序员是否可以正确地使用集合类,以及他们是否可以使用各种各样的想法来随机地解决问题,今天爱站技术频道小编为大家带来详解java  HashMap和HashTable的区别,一起来看看吧!

  HashMap和Hashtable的在Java中用来测试程序员是否可以正确地使用集合类,以及他们是否可以使用各种各样的想法来随机地解决问题,今天爱站技术频道小编为大家带来详解java HashMap和HashTable的区别,一起来看看吧!

  (一)继承的历史不同

  public class Hashtable extends Dictionary implements Map

  public class HashMap extends AbstractMap implements Map

  Hashtable是继承自Dictionary类的,而HashMap则是Java 1.2引进的Map接口的一个实现。

  (二)安全性不同

  HashMap是非synchronized,而HashTable在默认的情况下是synchronized,这意味着HashTable是线程安全的,多个线程可以共享一个HashTable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5以后提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。当然,我们可以通过以下方法让HashMap同步:

  Map m = Collections.synchronizeMap(hashMap);

  (三)是否可为空值的异同

  HashMap可以让你将空值作为一个表条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,那么get()将返回null;而HashTable则不行,key和value都不允许出现null值。

  (四)二者的遍历方式的内部实现上不同

  Hashtable、HashMap都使用了 Iterator迭代器,HashMap的迭代器(Iterator)是fail-fast迭代器,而HashTable的enumerator迭代器不是fail-fast的。而由于历史原因,Hashtable还使用了Enumeration的方式 。

  (五)哈希值的使用不同

  HashTable直接使用对象的hashCode,而HashMap则需要重新计算hash值。

  (六)二者内部实现方式的数组的初始大小和扩容的方式不同

  HashTable中hash数组默认大小是11,增加的方式是 old*2+1;HashMap中hash数组的默认大小是16,而且一定是2的指数。

  详解java HashMap和HashTable的区别,大家了解的怎样了?在上文中,小编为大家做了简单的介绍。其实,在日常的程序开发中,是经常使可以使用的。

上一篇:Java中关于XML的解析

下一篇:利用Java实现随机验证码的代码

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载