Hashtable与Hashmap的区别

Hashtable与Hashmap底层都是基于散列表实现的(数组+链表结构)

Hashtable是java一开始发布时就提供的键值映射的数据结构,而HashMap产生于JDK1.2。
虽然Hashtable比HashMap出现的早一些,但是现在Hashtable基本上已经被弃用了。而HashMap已经成为应用最为广泛的一种数据类型,主要原因是因为Hashtable是线程安全的,效率比较低

 

Hashtable与Hashmap的区别

1、继承抽象类不同

        Hashtable和Hashmap都实现了Map, Cloneable, Serializable接口,都是他们继承的父类不同

        Hashtable继承了Dictionary抽象       
        Hashmap继承了AbstractMap抽象

        由于继承的抽象类不同,所以拥有的方法也不同, 比如HashMap把Hashtable的contains方法去掉了,改成containsValue和
        containsKey,因为contains方法容易让人引起误解。

 

2、储存的元素不同

     Hashtable既不支持Null key也不支持Null value。

     HashMap中,null可以作为键,只能有一个;可以有多个值为null。当get()方法返回null值时,可能是 HashMap中没有该键,       也可能使该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用                   containsKey()方法来判断。

 

3、安全性不同

     Hashtable是线程安全的,通过synchronized实现线程同步。

     HashMap是非线程安全的,所以速度比Hashtable快。可以使用 Collections.synchronizedMap(new HashMap)来转换

 

4、计算hash值的方法不同

      Hashtable计算hash是直接使用key的hashcode对table数组的长度直接进行取模

      HashMap计算hash对key的hashcode进行了二次hash,以获得更好的散列值,然后对table数组长度取摸

 

5、初始容量大小和每次扩充容量大小的不同

      Hashtable初始容量为11,HashMap的初始容量为16,两者的填充因子默认都是0.75

      Hashtable扩容时是容量翻倍+1即:capacity*2+1,HashMap扩容时是当前容量翻倍即:capacity*2HashMap 的 bucket 数组        大小一定是2的幂
      

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值