這是關於java集合類源碼分析文章的最後一篇,後面或許會隨着本身的一些理解,本身仍是會再來寫一兩篇集合源碼分析的文章,由於目前本身的理解,有些集合的源碼本身確實理解不了,因此我就不繼續分析其它集合源碼了,這是源碼分析的第14篇,java中經常使用的集合基本上分析完了,除了HashMap之類的沒有分析,都分析完了。
java
關於HashMap的源碼分析,本身在以前的文章中說過本身不會去分析它,由於我以爲你理解了散列函數就差很少了。好了,其餘閒話本身這裏就不單獨說了,接下來就看下LinkedBlockingDeque的源碼分析吧,因爲這是最後一篇,打算將大部分的方法都分析一下。面試
一,LinkedBlockingDeque的類結構,理解這個結構才能"登高望遠"微信
這個圖能夠看出來java做爲一門高級語言的"單繼承","多實現"的特色,理解這點就能夠了。關於這點本身也是在看不一樣代碼時有點思考出來的,本身沒有去讀一門很經典的書籍,由於我以爲本身仍是須要在前面作一個廣度和稍微深刻的知識理解,後面本身有時間再去看書來從新對這部分作一次理解吧。函數
二,閱讀源碼就是閱讀每一個方法的實現,其實容器是裝載數據的,因此咱們使用集合基本上都是使用添加add()方法,offer()方法,put()方法等操做,畢竟將數據裝載到內存便於操做。下面的這個方法分析的過於仔細了,因此圖片比較長,仔細看下,相信本身會有所收穫的。源碼分析
上面的add()方法分析完了,offer()方法以及put()方法的實現過程都和上面同樣,這裏就不分析了,只不過put()方法是一個阻塞性的方法。記住這個方法或許談論到這個方法時就能夠給面試官聊聊了。
.net
三,集合既然有"存"就有"取",這裏就分析一系列如何獲取隊列的元素方法,這裏先歸類一下,先分析一下如何分析獲取雙端隊列的隊首元素的方法,好比說element(),getFirst(),pollFirst(),take(),takeFirst(),pop()等方法。3d
因爲篇幅的問題,圖片的代碼過於太長,take()方法以及takeFirst()方法這裏就不分析了,和上面的釋放隊首節點是一個方法,只不過也是一個阻塞性的方法和put()方法相對應。
blog
四,獲取雙端隊列的隊尾元素,咱們能夠使用peekLast()方法,getLast()方法以及pollLast()方法,不一樣的是有的方法是僅僅獲取隊尾元素可是沒有出隊列,便是沒有從內存中釋放掉。繼承
因爲獲取隊首方法沒有去分析take()方法,因此這裏在獲取隊尾元素本身分析了一下,因爲源碼的分析都在對應的代碼上註釋說明了,不知道大家閱讀這樣的文章還習慣嗎,我本身看起來以爲還好,慢慢習慣就行了,正如我本身輸出文章同樣,文章的風格逐漸在向本身喜歡的風格方面變化。
隊列
五,最後,這裏就一塊兒分析一下判空方法isEmpty()和獲取隊列元素個數的size()方法以及隊列裏是否包含待查找元素的contains()方法,如何清空雙端隊列元素的clear()方法,讀起來像不像一個燴菜方法系列,哈哈。
本身想分析的方法都分析完了,其它的pop()方法就分析了,由於每一個方法都在上面分析了,這裏暫時不在這裏作一下分析源碼分析總結的文章了,說不定哪天本身理解好了就會單獨寫一篇本身對源碼分析總結的文章分享出來。
我也沒有去想本身會在最後寫兩篇源碼分析的文章會以這樣的風格進行輸出,只要本身喜歡就值得,這樣的風格確實很符合本身寫文章,之後會慢慢嘗試以這樣的內容進行輸出,目前本身的文章尚未以畫圖的形式來講明一個技術點的,到這裏就不閒扯其它的了。
我喜歡分享,你喜歡閱讀@WwpwW
本文分享自微信公衆號 - WwpwW(gh_245290c1861a)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。