java进阶|LinkedBlockingDeque源码分析

这是关于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源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索