声明,本文用的是jdk1.8数组
前面章节回顾:微信
如今这篇主要讲Set集合的三个子类:数据结构
这篇主要来看看它们比较重要的方法是如何实现的,须要注意些什么,最后比较一下哪一个时候用哪一个~多线程
强调:在学习本文以前,最好是看过Map系列的文章post
看这篇文章以前最好是有点数据结构的基础:性能
固然了,若是讲得有错的地方还请你们多多包涵并不吝在评论去指正~学习
首先,咱们来看一下HashSet的继承结构图:spa
按照惯例,咱们来看看HashSet顶部注释:.net
从顶部注释来看,咱们就能够概括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。
为了你们方便,刚新建了一下q群:742919422,你们也能够去交流交流。
文章的目录导航:zhongfucheng.bitcron.com/post/shou-j…
目前初步打算写多线程,大家以为怎么样呢?能够在评论区留言~