E
- 此集合中保存的元素的类型
public interface BlockingDeque<E> extends BlockingQueue<E>, Deque<E>
Deque
另外支持在检索元素时等待deque变为非空的阻塞操作,并等待存储元素时在deque中可用的空间。
BlockingDeque
方法有四种形式,不同的方式处理不能立即满足的操作,但可能在将来的某个时间点满足:一个抛出异常,第二个返回一个特殊值( null
或false
,具体取决于操作),第三个程序将无限期地阻止当前线程,直到操作成功为止,而第四个程序块在放弃之前只有给定的最大时限。 这些方法总结在下表中:
addFirst(e)
offerFirst(e)
putFirst(e)
offerFirst(e, time, unit)
Remove removeFirst()
pollFirst()
takeFirst()
pollFirst(time, unit)
Examine getFirst()
peekFirst()
not applicable not applicable Last Element (Tail) Throws exception Special value Blocks Times out Insert addLast(e)
offerLast(e)
putLast(e)
offerLast(e, time, unit)
Remove removeLast()
pollLast()
takeLast()
pollLast(time, unit)
Examine getLast()
peekLast()
not applicable not applicable
像任何BlockingQueue
一样 , BlockingDeque
是线程安全的,不允许空元素,并且可能(或可能不)是容量受限的。
A BlockingDeque
实现可以直接用作FIFO BlockingQueue
。 从BlockingQueue
接口BlockingDeque
方法正好等同于下表所示的BlockingDeque
方法:
BlockingQueue
Method Equivalent BlockingDeque
Method Insert add(e)
addLast(e)
offer(e)
offerLast(e)
put(e)
putLast(e)
offer(e, time, unit)
offerLast(e, time, unit)
Remove remove()
removeFirst()
poll()
pollFirst()
take()
takeFirst()
poll(time, unit)
pollFirst(time, unit)
Examine element()
getFirst()
peek()
peekFirst()
存储器一致性效果:当与其他并发集合,事先将物体放置成在一个线程动作BlockingDeque
happen-before到该元素的从访问或移除后续动作BlockingDeque
在另一个线程。
此接口是成员Java Collections Framework 。
Modifier and Type | Method and Description |
---|---|
boolean |
add(E e)
将指定的元素插入由此deque表示的队列(换句话说,在该deque的尾部),如果可以立即执行,而不违反容量限制,
true 在成功后返回
IllegalStateException 如果当前没有可用空间,则抛出IllegalStateException 。
|
void |
addFirst(E e)
插入此双端队列的前面,如果它是立即可行且不会违反容量限制,抛出一个指定的元素
IllegalStateException 如果当前没有空间可用。
|
void |
addLast(E e)
在插入如果它是立即可行且不会违反容量限制,抛出此双端队列的末尾指定元素
IllegalStateException 如果当前没有空间可用。
|
boolean |
contains(Object o)
如果此deque包含指定的元素,则返回
true 。
|
E |
element()
检索但不删除由此deque表示的队列的头部(换句话说,该deque的第一个元素)。
|
Iterator<E> |
iterator()
以正确的顺序返回此deque中的元素的迭代器。
|
boolean |
offer(E e)
将指定的元素插入由此deque表示的队列(换句话说,在该deque的尾部),如果可以立即执行,而不违反容量限制,
true 在成功时
false 如果当前没有可用空间,则返回false。
|
boolean |
offer(E e, long timeout, TimeUnit unit)
将指定的元素插入由此deque表示的队列中(换句话说,在该deque的尾部),等待指定的等待时间(如果需要空间可用)。
|
boolean |
offerFirst(E e)
插入此双端队列的前面,如果它是立即可行且不会违反容量限制,返回指定的元素
true 在成功和
false ,如果当前没有空间可用。
|
boolean |
offerFirst(E e, long timeout, TimeUnit unit)
在此deque的前面插入指定的元素,等待指定的等待时间(如果需要空间可用)。
|
boolean |
offerLast(E e)
插入此双端队列的末尾,如果它是立即可行且不会违反容量限制,返回指定的元素
true 在成功和
false ,如果当前没有空间可用。
|
boolean |
offerLast(E e, long timeout, TimeUnit unit)
在此deque的末尾插入指定的元素,如果需要空间可用,等待指定的等待时间。
|
E |
peek()
检索但不删除由此deque表示的队列的头部(换句话说,该deque的第一个元素),如果此deque为空,则返回
null 。
|
E |
poll()
检索并删除由此deque(换句话说,此deque的第一个元素)表示的队列的
null 如果此deque为空,则返回
null 。
|
E |
poll(long timeout, TimeUnit unit)
检索并删除由此deque(换句话说,该deque的第一个元素)表示的队列的头部,等待到指定的等待时间(如有必要)使元素变为可用。
|
E |
pollFirst(long timeout, TimeUnit unit)
检索并删除此deque的第一个元素,等待指定的等待时间(如有必要),使元素变为可用。
|
E |
pollLast(long timeout, TimeUnit unit)
检索并删除此deque的最后一个元素,等待到指定的等待时间,如果需要,元素可用。
|
void |
push(E e)
将元素推送到由此deque表示的堆栈(换句话说,在该deque的头部),如果可以立即执行,而不违反容量限制,则抛出
IllegalStateException 如果当前没有可用空间)。
|
void |
put(E e)
将指定的元素插入由此deque表示的队列(换句话说,在该deque的尾部),等待空格变为可用时。
|
void |
putFirst(E e)
在此deque的前面插入指定的元素,如有必要,等待空格变为可用。
|
void |
putLast(E e)
在此deque的末尾插入指定的元素,如有必要,等待空格变为可用。
|
E |
remove()
检索并删除由此deque表示的队列的头(换句话说,该deque的第一个元素)。
|
boolean |
remove(Object o)
从此deque中删除指定元素的第一个出现。
|
boolean |
removeFirstOccurrence(Object o)
从此deque中删除指定元素的第一个出现。
|
boolean |
removeLastOccurrence(Object o)
从此deque中删除指定元素的最后一次出现。
|
int |
size()
返回此deque中的元素数。
|
E |
take()
检索并删除由此deque(换句话说,该deque的第一个元素)表示的队列的头部,如果需要,等待,直到元素可用。
|
E |
takeFirst()
检索并删除此deque的第一个元素,如有必要等待,直到元素可用。
|
E |
takeLast()
检索并删除此deque的最后一个元素,如有必要等待,直到元素可用。
|
drainTo, drainTo, remainingCapacity
descendingIterator, getFirst, getLast, peekFirst, peekLast, pollFirst, pollLast, pop, removeFirst, removeLast
addAll, clear, containsAll, equals, hashCode, isEmpty, parallelStream, removeAll, removeIf, retainAll, spliterator, stream, toArray, toArray
void addFirst(E e)
IllegalStateException
如果当前没有空间可用。
当使用容量限制的deque时,通常最好使用offerFirst
。
addFirst
在界面
Deque<E>
e
- 要添加的元素
IllegalStateException
- 如果由于容量限制,此时无法添加该元素
ClassCastException
- 如果指定元素的类阻止将其添加到此deque
NullPointerException
- 如果指定的元素为空
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此deque
void addLast(E e)
IllegalStateException
如果当前没有空间可用。
当使用容量限制的deque时,通常最好使用offerLast
。
addLast
在接口
Deque<E>
e
- 要添加的元素
IllegalStateException
- 如果由于容量限制,此时无法添加该元素
ClassCastException
- 如果指定元素的类阻止将其添加到此deque
NullPointerException
- 如果指定的元素为空
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此deque
boolean offerFirst(E e)
true
在成功和false
,如果当前没有空间可用。
当使用有容量限制的双端队列,这种方法通常是优选的addFirst
方法,其能够仅失败通过抛出异常来插入的元件。
offerFirst
在接口
Deque<E>
e
- 要添加的元素
true
如果元素被添加到这个deque,否则
false
ClassCastException
- 如果指定元素的类阻止将其添加到此deque
NullPointerException
- 如果指定的元素为空
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此deque
boolean offerLast(E e)
true
在成功和false
,如果当前没有空间可用。
当使用有容量限制的双端队列,这种方法通常是优选的addLast
方法,其能够仅失败通过抛出异常来插入的元件。
offerLast
在接口
Deque<E>
e
- 要添加的元素
true
如果元素被添加到这个deque,否则
false
ClassCastException
- 如果指定元素的类阻止将其添加到此deque
NullPointerException
- 如果指定的元素为空
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此deque
void putFirst(E e) throws InterruptedException
e
- 要添加的元素
InterruptedException
- 如果在等待时中断
ClassCastException
- 如果指定元素的类阻止将其添加到此deque
NullPointerException
- 如果指定的元素为空
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此deque
void putLast(E e) throws InterruptedException
e
- 要添加的元素
InterruptedException
- 如果在等待时中断
ClassCastException
- 如果指定元素的类阻止将其添加到此deque
NullPointerException
- 如果指定的元素为空
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此deque
boolean offerFirst(E e, long timeout, TimeUnit unit) throws InterruptedException
e
- 要添加的元素
timeout
- 放弃等待多久,以
unit
为单位
unit
- a
TimeUnit
确定如何解释
timeout
参数
true
如果成功,或
false
如果在空间可用之前经过指定的等待时间
InterruptedException
- 如果在等待时中断
ClassCastException
- 如果指定元素的类阻止将其添加到此deque
NullPointerException
- 如果指定的元素为空
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此deque
boolean offerLast(E e, long timeout, TimeUnit unit) throws InterruptedException
e
- 要添加的元素
timeout
- 放弃之前等待多久,以
unit
为单位
unit
- a
TimeUnit
确定如何解释
timeout
参数
true
如果成功,或
false
如果在空间可用之前经过了指定的等待时间
InterruptedException
- 如果在等待时中断
ClassCastException
- 如果指定元素的类阻止将其添加到此deque
NullPointerException
- 如果指定的元素为空
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此deque
E takeFirst() throws InterruptedException
InterruptedException
- 如果在等待时中断
E takeLast() throws InterruptedException
InterruptedException
- 如果在等待时中断
E pollFirst(long timeout, TimeUnit unit) throws InterruptedException
timeout
- 放弃之前等待多久,以
unit
为单位
unit
- a
TimeUnit
确定如何解释
timeout
参数
null
元素可用,如果指定的等待时间之前
InterruptedException
- 如果在等待时中断
E pollLast(long timeout, TimeUnit unit) throws InterruptedException
timeout
- 放弃等待多久,以
unit
为单位
unit
- a
TimeUnit
确定如何解释
timeout
参数
null
元素可用,如果指定的等待时间之前
InterruptedException
- 如果在等待时中断
boolean removeFirstOccurrence(Object o)
e
,使得o.equals(e)
(如果这样的元素存在)。
如果此deque包含指定的元素(或等效地,如果此deque由于调用而更改),则返回true
。
removeFirstOccurrence
在界面
Deque<E>
o
- 要从此deque移除的元素(如果存在)
true
如果某个元素因此调用而被删除
ClassCastException
- 如果指定元素的类与此deque不兼容(
optional )
NullPointerException
- 如果指定的元素为空(
optional )
boolean removeLastOccurrence(Object o)
e
,使得o.equals(e)
(如果这样的元素存在)。
如果此deque包含指定的元素(或等效地,如果该deque由于调用而更改),则返回true
。
removeLastOccurrence
在界面
Deque<E>
o
- 要从此deque移除的元素(如果存在)
true
如果某个元素因此调用而被删除
ClassCastException
- 如果指定元素的类与此deque不兼容(
optional )
NullPointerException
- 如果指定的元素为空(
optional )
boolean add(E e)
true
在成功后返回IllegalStateException
如果当前没有可用空间,则抛出IllegalStateException 。
当使用容量限制的deque时,通常最好使用offer
。
此方法相当于addLast
。
add
在界面
BlockingQueue<E>
add
在界面
Collection<E>
add
在接口
Deque<E>
add
在界面
Queue<E>
e
- 要添加的元素
true
(由
Collection.add(E)
指定 )
IllegalStateException
- 如果由于容量限制,此时无法添加该元素
ClassCastException
- 如果指定元素的类阻止将其添加到此deque
NullPointerException
- 如果指定的元素为空
IllegalArgumentException
- 如果指定元素的某些属性阻止其添加到此deque
boolean offer(E e)
true
在成功时false
如果当前没有可用空间,则返回false。
当使用有容量限制的双端队列,这种方法通常是优选的add(E)
方法,其能够仅失败通过抛出异常来插入的元件。
此方法相当于offerLast
。
offer
在接口
BlockingQueue<E>
offer
在界面
Deque<E>
offer
在界面
Queue<E>
e
- 要添加的元素
true
如果元素被添加到此队列,否则
false
ClassCastException
- 如果指定元素的类阻止将其添加到此deque
NullPointerException
- 如果指定的元素为空
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此deque
void put(E e) throws InterruptedException
此方法相当于putLast
。
put
在界面
BlockingQueue<E>
e
- 要添加的元素
InterruptedException
- 等待时中断
ClassCastException
- 如果指定元素的类阻止它添加到此deque
NullPointerException
- 如果指定的元素为空
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此deque
boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException
此方法相当于offerLast
。
offer
在界面
BlockingQueue<E>
e
- 要添加的元素
timeout
- 放弃等待多久,以
unit
为单位
unit
- a
TimeUnit
确定如何解释
timeout
参数
true
如果元素被添加到这个deque,否则
false
InterruptedException
- 如果在等待时中断
ClassCastException
- 如果指定元素的类阻止将其添加到此deque
NullPointerException
- 如果指定的元素为空
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此deque
E remove()
E poll()
null
如果此deque为空,则返回null
。
此方法相当于Deque.pollFirst()
。
E take() throws InterruptedException
此方法相当于takeFirst
。
take
在界面
BlockingQueue<E>
InterruptedException
- 如果在等待时中断
E poll(long timeout, TimeUnit unit) throws InterruptedException
这个方法相当于pollFirst
。
poll
在接口
BlockingQueue<E>
timeout
- 放弃之前等待多久,以
unit
为单位
unit
- a
TimeUnit
确定如何解释
timeout
参数
null
元素可用,如果指定的等待时间之前
InterruptedException
- 如果在等待时中断
E element()
boolean remove(Object o)
e
,使得o.equals(e)
(如果这样的元素存在)。
如果此deque包含指定的元素(或等效地,如果该deque由于调用而更改),则返回true
。
此方法相当于removeFirstOccurrence
。
remove
在界面
BlockingQueue<E>
remove
在接口
Collection<E>
remove
在接口
Deque<E>
o
- 要从此deque移除的元素(如果存在)
true
如果这个deque由于调用而改变了
ClassCastException
- 如果指定元素的类与此deque不兼容(
optional )
NullPointerException
- 如果指定的元素为空(
optional )
boolean contains(Object o)
true
。
更正式地,返回true
如果且仅当该deque包含至少一个元素e
,使得o.equals(e)
。
contains
在接口
BlockingQueue<E>
contains
在接口
Collection<E>
contains
在界面
Deque<E>
o
- 要检查的对象在这个deque的遏制
true
如果此双端队列包含指定的元素
ClassCastException
- 如果指定元素的类与此deque不兼容(
optional )
NullPointerException
- 如果指定的元素为空(
optional )
int size()
void push(E e)
IllegalStateException
如果当前没有可用空间)。
此方法相当于addFirst
。
push
在界面
Deque<E>
e
- 要推的元素
IllegalStateException
- 如果由于容量限制,此时无法添加该元素
ClassCastException
- 如果指定元素的类阻止将其添加到此deque
NullPointerException
- 如果指定的元素为空
IllegalArgumentException
- if some property of the specified element prevents it from being added to this deque