Java集合6——HashMap和HashTable的区别

HashMap与HashTable的不同

HashTable简介

和HashMap一样,Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射
Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。
Hashtable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为null。此外,Hashtable中的映射不是有序的。

  1. 首先来观察这两个类的定义

  HashTable

   public class Hashtable<K,V>  

    extends Dictionary<K,V>  

    implements Map<K,V>, Cloneable, java.io.Serializable {  

  HashMap

   public class HashMap<K,V>  

    extends AbstractMap<K,V>  

    implements Map<K,V>, Cloneable, Serializable    

HashTable继承于Dictionary<K,V>,而HashMap继承于AbstractMap<K,V>

  1. 观察其put方法

HashMap

 

这是HashMap的put()方法,这里允许key为null。如果key值重复将覆盖其value值,并且先对key值进行两次Hash

如果超过默认容量,将用这种方法扩容。2*table.length

 

HashTable

*** 线程安全的

*** key值和value值不能为null,会报异常

*** 直接调用了Hashcode()方法

 

如果超过默认容量将调用rehash()方法,

扩容为二倍加一

  1. 观察其默认值

HashTable

 

可知HashTable的默认大小为11

HashMap

可知HashMap的默认容量为16

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值