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