- 类型参数:
-
E
- 此队列中保存的元素的类型
- 所有超接口:
-
Collection<E>
,Iterable<E>
- 所有已知子接口:
-
BlockingDeque<E>
,BlockingQueue<E>
,Deque<E>
,TransferQueue<E>
- 所有已知实现类:
-
AbstractQueue
,ArrayBlockingQueue
,ArrayDeque
,ConcurrentLinkedDeque
,ConcurrentLinkedQueue
,DelayQueue
,LinkedBlockingDeque
,LinkedBlockingQueue
,LinkedList
,LinkedTransferQueue
,PriorityBlockingQueue
,PriorityQueue
,SynchronousQueue
Collection
操作外,队列还提供额外的插入、提取和检查操作。这些方法中的每一个都有两种形式:一种在操作失败时抛出异常,另一种返回一个特殊值(null
或false
,取决于操作)。后一种插入操作形式专门设计用于与容量受限的Queue
实现一起使用;在大多数实现中,插入操作不会失败。
抛出异常 | 返回特殊值 | |
---|---|---|
插入 | add(e) |
offer(e) |
移除 | remove() |
poll() |
检查 | element() |
peek() |
队列通常按照FIFO(先进先出)的方式对元素进行排序,但并非必须如此。优先级队列是其中的例外,它根据提供的比较器或元素的自然顺序对元素进行排序,而LIFO队列(或栈)按照LIFO(后进先出)的顺序对元素进行排序。无论使用哪种排序方式,队列的头部是通过调用remove()
或poll()
来移除的元素。在FIFO队列中,所有新元素都插入到队列的尾部。其他类型的队列可能使用不同的放置规则。每个Queue
实现都必须指定其排序属性。
offer
方法在可能的情况下插入一个元素,否则返回false
。这与Collection.add
方法不同,后者只能通过抛出未检查的异常来失败地添加元素。offer
方法设计用于在失败是正常而不是异常情况下使用,例如在固定容量(或“有界”)队列中。
remove()
和poll()
方法移除并返回队列的头部。从队列中移除的确切元素取决于队列的排序策略,这在不同的实现中有所不同。remove()
和poll()
方法在队列为空时的行为仅有所不同:remove()
方法会抛出异常,而poll()
方法会返回null
。
element()
和peek()
方法返回队列的头部,但不移除它们。
Queue
接口不定义阻塞队列方法,这在并发编程中很常见。这些方法,它们等待元素出现或空间变得可用,是在扩展此接口的BlockingQueue
接口中定义的。
Queue
实现通常不允许插入null
元素,尽管一些实现(如LinkedList
)不禁止插入null
。即使在允许的实现中,也不应该将null
插入到Queue
中,因为null
也被poll
方法用作指示队列不包含元素的特殊返回值。
Queue
实现通常不定义基于元素的equals
和hashCode
方法,而是从Object
类继承基于标识的版本,因为对于具有相同元素但不同排序属性的队列,基于元素的相等性并不总是明确定义的。
此接口是Java集合框架的成员。
- 自JDK版本:
- 1.5
-
Method Summary
Methods declared in interface java.util.Collection
addAll, clear, contains, containsAll, equals, hashCode, isEmpty, iterator, parallelStream, remove, removeAll, removeIf, retainAll, size, spliterator, stream, toArray, toArray, toArray
-
Method Details
-
add
如果可以立即在不违反容量限制的情况下将指定的元素插入此队列,则将其插入,成功时返回true
,如果当前没有空间,则抛出IllegalStateException
。- 指定者:
-
add
在接口Collection<E>
中 - 参数:
-
e
- 要添加的元素 - 返回:
-
true
(由Collection.add(E)
指定) - 抛出:
-
IllegalStateException
- 如果由于容量限制而无法在此时添加元素 -
ClassCastException
- 如果指定元素的类别阻止将其添加到此队列中 -
NullPointerException
- 如果指定元素为null且此队列不允许null元素 -
IllegalArgumentException
- 如果此元素的某些属性阻止将其添加到此队列中
-
offer
如果可以立即在不违反容量限制的情况下将指定的元素插入此队列,则将其插入。在使用容量受限队列时,此方法通常优于add(E)
,后者只能通过抛出异常来失败地插入元素。- 参数:
-
e
- 要添加的元素 - 返回:
-
如果元素已添加到此队列,则返回
true
,否则返回false
- 抛出:
-
ClassCastException
- 如果指定元素的类别阻止将其添加到此队列中 -
NullPointerException
- 如果指定元素为null且此队列不允许null元素 -
IllegalArgumentException
- 如果此元素的某些属性阻止将其添加到此队列中
-
remove
E remove()检索并移除此队列的头部。此方法与poll()
的区别仅在于如果此队列为空,则抛出异常。- 返回:
- 此队列的头部
- 抛出:
-
NoSuchElementException
- 如果此队列为空
-
poll
E poll()检索并移除此队列的头部,如果此队列为空,则返回null
。- 返回:
-
此队列的头部,如果此队列为空,则返回
null
-
element
E element()检索但不移除此队列的头部。此方法与peek
仅在此队列为空时抛出异常时有所不同。- 返回:
- 此队列的头部
- 抛出:
-
NoSuchElementException
- 如果此队列为空
-
peek
E peek()检索但不移除此队列的头部,如果此队列为空则返回null
。- 返回:
-
此队列的头部,如果此队列为空则返回
null
-