Java集合源码分析之Set概述_一点课堂(多岸学院)

450 阅读3分钟

这篇文章是本系列的完结了,也会是读起来最轻松的文章了。因为这里只有一个概念,那就是Set是什么,其余的则是一些感触与总结。

Set概述

因为Set的结构及实现都和Map保持高度一致,这里将不再对其进行分析了,感兴趣的朋友可以自行查看源码。但我们还是需要知道什么是SetSet是一个包含不可重元素的集合,也就是所有的元素都是唯一的。还是看下文档说明吧:

A collection that contains no duplicate elements. More formally, sets contain no pair of elements e1 and e2 such that *e1.equals(e2), and at most one null element. As implied by its name, this interface models the mathematical set* abstraction.

此外Set系列也有SortedSetNavigableSet这种基于排序的接口,它们的作用在分析Map时都已经详细介绍过了。

总结

分析了这么多集合类的源码之后,最大的感触并不是,“哦,原来如此~”,而是惊叹于作者高度的抽象思维,严谨的代码,以及极其规范的编码风格。代码本身的价值远远比不上这种思想带来的受益,我们应该掌握的是这些原理,而不是记住枯燥的代码实现。

但惊艳的背后,作者付出的艰辛也是无比巨大的,其中也饱含辛酸与无奈。创造出那么多的数据结构,不就是为了提高处理数据的能力吗?然而现实是如果想在一方面追求极致,就必须在其他方面有所妥协,没有一种结构能够让我们一劳永逸。所以需求无尽,探索无尽。可还记得在LinkedList中的查询方法?在这么小的点上,还尽力把查询速度提升了一半,当时真的被这种操作惊艳了,一方面是因为工程师的细腻,另一方面,可能是因为,“哎,实在做不了更多了~”的感叹。

在Java的集合类中,大量的依赖于对象的equalshashCodeclone方法,有些还需要我们实现Comparable接口。如果对数据结构有所理解,又清楚集合类用了哪些个数据结构,我想需要实现哪些方法是可以推测出来的。如果我们能把握这些细节,就能写出更优秀的代码。如果我们能掌握这些思想,就能超脱语言的束缚,理解软件设计的精髓。

如果阅读本系列文章能够给您带来一丁点的提升,对我都是莫大的欣慰与鼓励。

现在,你有把握回答在开篇中提及的几个问题了吗?

【感谢您能看完,如果能够帮到您,麻烦点个赞~】

更多经验技术欢迎前来共同学习交流:一点课堂-为梦想而奋斗的在线学习平台 http://www.yidiankt.com/

![关注公众号,回复“1”免费领取-【java核心知识点】]file

QQ讨论群:616683098

QQ:3184402434

想要深入学习的同学们可以加我QQ一起学习讨论~还有全套资源分享,经验探讨,等你哦!在这里插入图片描述