HashTable & HashSet 源码分析

来源:互联网 发布:淘宝联盟佣金少了 编辑:程序博客网 时间:2024/05/30 21:58

     建议大家看这篇之前先看上一篇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了,再看看这篇介绍的几个有差异的地方就差不多了。

原创粉丝点击