Java之集合(十九)LinkedBlockingDeque

  转载请注明源出处:http://www.cnblogs.com/lighten/p/7494577.html

1.前言

  本章介绍LinkedBlockingDeque,这是一个可选容量的有界双向链表队列,默认容量大小是Integer.MAX_VALUE,基本可以认为是无界了。其方法大多是常量时间操作,除了remove相关方法和contains以及所有bulk操作是和元素个数相关的线性时间开销。

2.LinkedBlockingDeque

2.1数据结构

  标准的一个双向链表的结构,第一个节点,最后一个节点,计数字段,容量字段和锁相关的三个字段。Node节点也就是前后结点和当前值。

2.2基本操作

  头结点插入一个元素:

  加锁,判断容量,将当前结点的下一个节点设置成当前头结点,该节点设置成头结点。第一次插入last为null,由于是头插入,第一次的头结点就设置成尾结点,否则就完成双向链表的链接。尾插入的做法类似,不过更新的是尾结点。

  取出头结点:

  加锁,找到当前头结点,如果为null,证明队列为空返回null。不为null,找到下一个节点,设置成头结点。下一个节点为null,队列为空,尾结点也就是null,否者下一个节点的没有前一个节点。返回当前头节点里面的内容。这里有意思的是当前头结点的内容置为了null,但是下一个节点置为其本身,注释上写着help GC,由于没有对GC回收研究过,所以暂且这样认为。

  上面都是一些标准的双向链表的头尾插入方法,其它方法没有什么特殊的,就不再进行介绍。使用和一般的队列使用方法是一样的,也不给出用例了。

posted @ 2017-09-08 14:43  dark_saber  阅读(663)  评论(0编辑  收藏  举报