這篇文章是本系列的完結(jié)了糕非,也會是讀起來最輕松的文章了立宜。因為這里只有一個概念藕各,那就是Set是什么,其余的則是一些感觸與總結(jié)片效。
Set概述
因為Set的結(jié)構及實現(xiàn)都和Map保持高度一致红伦,這里將不再對其進行分析了,感興趣的朋友可以自行查看源碼淀衣。但我們還是需要知道什么是Set色建,Set是一個包含不可重元素的集合,也就是所有的元素都是唯一的舌缤。還是看下文檔說明吧:
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系列也有SortedSet
、NavigableSet
這種基于排序的接口某残,它們的作用在分析Map時都已經(jīng)詳細介紹過了国撵。
總結(jié)
分析了這么多集合類的源碼之后,最大的感觸并不是玻墅,“哦介牙,原來如此~”,而是驚嘆于作者高度的抽象思維澳厢,嚴謹?shù)拇a环础,以及極其規(guī)范的編碼風格囚似。代碼本身的價值遠遠比不上這種思想帶來的受益,我們應該掌握的是這些原理线得,而不是記住枯燥的代碼實現(xiàn)饶唤。
但驚艷的背后,作者付出的艱辛也是無比巨大的贯钩,其中也飽含辛酸與無奈募狂。創(chuàng)造出那么多的數(shù)據(jù)結(jié)構,不就是為了提高處理數(shù)據(jù)的能力嗎角雷?然而現(xiàn)實是如果想在一方面追求極致祸穷,就必須在其他方面有所妥協(xié),沒有一種結(jié)構能夠讓我們一勞永逸勺三。所以需求無盡雷滚,探索無盡÷鸺幔可還記得在LinkedList
中的查詢方法祈远?在這么小的點上,還盡力把查詢速度提升了一半刻蚯,當時真的被這種操作驚艷了绊含,一方面是因為工程師的細膩,另一方面炊汹,可能是因為躬充,“哎,實在做不了更多了~”的感嘆讨便。
在Java的集合類中充甚,大量的依賴于對象的equals
、hashCode
霸褒、clone
方法伴找,有些還需要我們實現(xiàn)Comparable
接口慰枕。如果對數(shù)據(jù)結(jié)構有所理解友瘤,又清楚集合類用了哪些個數(shù)據(jù)結(jié)構最欠,我想需要實現(xiàn)哪些方法是可以推測出來的溉潭。如果我們能把握這些細節(jié)病游,就能寫出更優(yōu)秀的代碼叽躯。如果我們能掌握這些思想花鹅,就能超脫語言的束縛疙赠,理解軟件設計的精髓旁理。
如果閱讀本系列文章能夠給您帶來一丁點的提升樊零,對我都是莫大的欣慰與鼓勵。
現(xiàn)在孽文,你有把握回答在開篇中提及的幾個問題了嗎驻襟?
上一篇:Java集合源碼分析之Map(六):LinkedHashMap
下一篇:沒有了~
我是飛機醬夺艰,如果您喜歡我的文章,可以關注我~
編程之路沉衣,道阻且長郁副。唯,路漫漫其修遠兮厢蒜,吾將上下而求索霞势。