详解java HashMap和HashTable的区别

作者:kgmucom   在线用户:16
风之恋奇迹私服技术网是一家提供最新互联网编程技术网站

  HashMap和Hashtable的在中用来测试程序员是否可以正确地使用集合类,以及他们是否可以使用各种各样的想法来随机地解决问题,今天爱站技术频道小编为大家带来详解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的区别,大家了解的怎样了?在上文中,小编为大家做了简单的介绍。其实,在日常的程序开发中,是经常使可以使用的。

提供最全面的奇迹sf开服版本和最新的奇迹私服开服技术信息,奇迹私服文库让每一位奇迹私服玩家找到自己需要的版本技术文章

上一篇:奇迹私服实现ajax三级联动的效果

下一篇:详解Java 使用IO流实现大文件的分割与合并

请发表您的评论