HashTable & HashSet 源码分析

     建议大家看这篇之前先看上一篇HashMap的源码分析,因为这篇是基于上篇大家理解了HashMap的前提下写的。所以这篇大家有什么不明白的地方,先看上篇了解HashMap的源码实现。^_^

 

HashTable

 

     源码部分可以参考上一篇HashMap,差不多的。

     以下几个点注意,

     1,HashTable是extends Dictionary<K,V>的,

          而HashMap是extends AbstractMap<K,V>的。

 

     2,HashTable方法都是同步的,加了关键字synchronized,如下可以看到源码,对比上一篇文章,可以看到HashMap是没有的。

    

 

     3, 在HashTable的put方法中,value是不能为null的

    

 

     4,暂时我看源码找到的最后一个不同点,在下面的源码中已经写在注释中。

     

 

 

HashSet

   

   我们看看HashSet中默认构造方法,会发现HashSet底层是采用HashMap实现。

   

 

    下面给出HashSet的add方法

    

 

    可以看到我们往HashSet存的对象最后是作为HashMap的Key存储的,读上篇HashMap的源码应该知道Key是不可能重复的,所以HashSet里面是没有重复的值的,包括往HashSet存null值,也只会有一个null。

   呵呵,语言表达也许会表达不清楚,大家运行一下下面的例子,看看打印出来的值,就明白了。

  

 

   呵呵,其余的也没什么好说了,底层实际上就是HashMap,弄懂HashMap了,再看看这篇介绍的几个有差异的地方就差不多了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值