声明,本文用的是jdk1.8
前面章节回顾:
现在这篇主要讲Set集合的三个子类:
这篇主要来看看它们比较重要的方法是如何实现的,需要注意些什么,最后比较一下哪个时候用哪个~
强调: 在学习本文之前,最好是看过Map系列的文章
看这篇文章之前最好是有点数据结构的基础:
当然了,如果讲得有错的地方还请大家多多包涵并不吝在评论去指正~
首先,我们来看一下HashSet的继承结构图:
按照惯例,我们来看看HashSet顶部注释:
从顶部注释来看,我们就可以归纳HashSet的要点了:
我本来也是想在写完List集合就转到Set集合的了,可是:看到底层实际上是一个HashMap实例时,我就去学习Map集合先了~
顶部注释说底层实际上是一个HashMap实例,那证据呢?
我们再来看一下HashSet整个类的方法和属性:
对于学习过HashMap的人来说,简直简单得让人开心,哈哈哈~
我们知道Map是一个映射,有key有value, 既然HashSet底层用的是HashMap,那么value在哪里呢 ???
value是一个Object, 所有的value都是它
所以可以直接总结出:HashSet实际上就是封装了HashMap, 操作HashSet元素实际上就是操作HashMap 。这也是面向对象的一种体现, 重用性贼高 !
建议:先去阅读 HashMap就是这么简单【源码剖析】
首先,我们也来看看TreeSet的类继承结构图:
按照惯例,我们来看看TreeSet顶部注释:
从顶部注释来看,我们就可以归纳TreeSet的要点了:
首先,我们也来看看TreeSet的类继承结构图:
按照惯例,我们来看看LinkedHashSet顶部注释:
从顶部注释来看,我们就可以归纳LinkedHashSet的要点了:
可以很明显地看到, Set集合的底层就是Map ,所以我都没有做太多的分析在上面,也没什么好分析的了。
下面总结一下Set集合常用的三个子类吧:
HashSet:
TreeSet:
LinkedHashSet:
从结论而言我们就可以根据自己的实际情况来使用了。
参考资料:
如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以 关注微信公众号:Java3y 。为了大家方便,刚新建了一下 qq群:742919422 ,大家也可以去交流交流。谢谢支持了!希望能多介绍给其他有需要的朋友
文章的目录导航 : https://zhongfucheng.bitcron.com/post/shou-ji/wen-zhang-dao-hang
目前初步打算写多线程,你们觉得怎么样呢?可以在评论区留言~