大家好,今天来为大家解答3分钟高效掌握Set集合技巧这个问题的一些问题点,包括也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
前几章回顾:
集合概述List 集合就是这么简单[源码分析] Map 集合、哈希表、红黑树简介HashMap 就是这么简单[源码分析] LinkedHashMap 就是这么简单[源码分析] TreeMap 就是这么简单[源码]分析】ConcurrentHashMap基于JDK1.8源码分析本文主要讲Set集合的三个子类:
HashSet集合A:的底层数据结构是哈希表(元素为链表的数组)+红黑树。 TreeSet集合A:的底层数据结构是红黑树(它是自平衡二叉树)B:以保证元素的排序。 LinkedHashSet set A:底层数据结构由哈希表(元素为链表的数组)和双向链表组成。本文主要看一下他们比较重要的方法是如何实现的,需要注意什么,最后比较一下什么时候用哪个~
重点:在学习本文之前,最好是看过Map系列的文章在阅读本文之前最好有一些数据结构的基础知识:
Java 实现了单向链表、堆栈和队列。就是这么简单。二叉树就是这么简单。当然,如果我说的有什么错误的地方,还请大家原谅,欢迎在评论中指正~
一、HashSet剖析
首先我们看一下HashSet的继承结构图:
像往常一样,我们看一下HashSet 的置顶评论:
从最上面的评论来看,我们可以总结出HashSet的要点:
实现Set 接口不保证迭代顺序并允许null 元素。底层实际上是一个HashMap实例异步初始容量对迭代性能影响较大。本来想写完List集合之后改用Set集合,但是:我看到底层其实是一个HashMap实例。当时就先去学地图收藏了~
上面的评论说底层其实是一个HashMap实例,那么证据在哪里呢?
wrkTqHf.png 我们看一下整个HashSet类的方法和属性:
M9bACqH.png 对于学过HashMap的人来说,简单得让人开心,哈哈哈~
我们知道Map是一个映射,有键和值,既然HashSet底层用的是HashMap,那么value在哪里呢?
imagevalue是一个Object,所有的value都是它,所以可以直接得出结论:HashSet实际上封装了HashMap,操作HashSet元素实际上就是操作HashMap。这也是面向对象的一种体现,重用性贼高!
建议:先阅读HashMap。就这么简单【源码分析】
二、TreeSet剖析
首先我们看一下TreeSet的类继承结构图:
像往常一样,我们看一下TreeSet的顶部注释:
从上面的评论来看,我们可以总结出TreeSet的要点:
实现NavigableSet接口可以实现排序功能底层实际上是一个TreeMap实例异步图像
三、LinkedHashSet剖析
首先我们也看一下TreeSet的类继承结构图:
像往常一样,我们看一下LinkedHashSet 上的置顶评论:
从最上面的评论来看,我们可以总结出LinkedHashSet的要点:
迭代是有序的并且允许为空底层实际上是一个HashMap+双向链表实例(其实就是LinkedHashMap)...。异步性能比HashSet稍差,因为双向链表的初始容量需要维护,与迭代无关。 LinkedHashSet迭代双向链表
四、总结
。可以明显看出010 -59000,所以我没有对其做太多分析,也没有什么可分析的。
我们总结一下Set集合的三个常用子类:
Set集合的底层就是MapUnordered,允许为null,底层是HashMap(哈希表+红黑树),非线程同步HashSet:Ordered,不允许为null,底层是TreeMap(红黑树),非线程同步TreeSet:迭代是有序的,允许null,底层是HashMap+双向链表,非线程同步,从结论来看,我们可以根据自己的实际情况来使用。
参考:
https://zhuanlan.zhihu.com/p/29021276https://blog.csdn.net/panweiwei1994/article/details/76555359 文章如有错误,还请指正,让大家互相交流。习惯在微信上阅读技术文章,想要获取更多Java资源的同学可以拨打LinkedHashSet:。为了方便大家,我们刚刚新建了一个号码关注微信公众号:Java3y,大家也可以在那里进行交流。感谢您的支持!希望可以介绍给其他有需要的朋友。
【3分钟高效掌握Set集合技巧】相关文章:
用户评论
终于不用苦逼地记住各种Set操作了!
有13位网友表示赞同!
三分钟就学完?太强大了!一定要试试看。
有17位网友表示赞同!
我一直想学习一下Set,这篇文章正好赶上了我的需求。
有20位网友表示赞同!
代码简单易懂就好理解吗?期待着深入学习。
有16位网友表示赞同!
感觉3分钟能搞明白基本操作应该足够了,方便快捷!
有10位网友表示赞同!
有没有什么常见的实际应用场景可以分享呢?
有12位网友表示赞同!
Set集合挺多地方用得到的,比如去重等等。
有18位网友表示赞同!
这篇文章适合小白入门吗?我的编程基础不太好。
有10位网友表示赞同!
我还没接触过Set集合,这篇文章能让我快速入坑吗?
有17位网友表示赞同!
3分钟搞定好像有点夸张吧?至少给我一些核心概念的介绍吧。
有13位网友表示赞同!
希望能够详细解释一下创建和使用Set集合的过程。
有12位网友表示赞同!
除了基本操作之外还有哪些高级应用需要注意呢?
有6位网友表示赞同!
感觉很实用,我经常会遇到需要去重或者查找元素的情况。
有7位网友表示赞同!
这篇文章分享一些常用的 Set 集合代码案例吗?
有9位网友表示赞同!
学习完Set集合之后可以做什么项目呢?建议一下吧。
有16位网友表示赞同!
看起来像是Python相关的文章吧?用别的语言也有类似的集合类型吗?
有14位网友表示赞同!
3分钟搞定听起来很有吸引力,我打算花些时间来尝试一下。
有15位网友表示赞同!
这篇文章能够解答我使用Set集合的一些疑问吗?
有11位网友表示赞同!
希望能有一些代码示例和详细的图解说明。
有9位网友表示赞同!
学习新的数据结构感觉总是充满兴奋感!
有13位网友表示赞同!