栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java  HashMap和HashTable的区别详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java  HashMap和HashTable的区别详解

  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的指数。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/148309.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号