- 类型参数:
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 队列(或堆栈)。无论使用何种顺序,队列的 head 都是将通过调用 remove() 或 poll() 删除的元素。在 FIFO 队列中,所有新元素都插入到队列的tail。其他类型的队列可能使用不同的放置规则。每个 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 集合框架 的成员。
- 自从:
- 1.5
-
方法总结
在接口 java.util.Collection 中声明的方法
addAll, clear, contains, containsAll, equals, hashCode, isEmpty, iterator, parallelStream, remove, removeAll, removeIf, retainAll, size, spliterator, stream, toArray, toArray, toArray
-
方法详情
-
add
如果可以在不违反容量限制的情况下立即将指定的元素插入此队列,则在成功时返回true并在当前没有可用空间时抛出IllegalStateException。- 指定者:
add在接口Collection<E>中- 参数:
e- 要添加的元素- 返回:
true(由Collection.add(E)指定)- 抛出:
IllegalStateException- 如果由于容量限制此时无法添加元素ClassCastException- 如果指定元素的类阻止它被添加到这个队列NullPointerException- 如果指定元素为空且此队列不允许空元素IllegalArgumentException- 如果此元素的某些属性阻止将其添加到此队列
-
offer
如果可以在不违反容量限制的情况下立即将指定元素插入此队列。当使用容量受限队列时,此方法通常优于add(E),后者仅通过抛出异常才能插入元素失败。- 参数:
e- 要添加的元素- 返回:
true如果元素被添加到这个队列,否则false- 抛出:
ClassCastException- 如果指定元素的类阻止它被添加到这个队列NullPointerException- 如果指定元素为空且此队列不允许空元素IllegalArgumentException- 如果此元素的某些属性阻止将其添加到此队列
-
remove
E remove()检索并删除此队列的头部。此方法与poll()的不同之处仅在于,如果此队列为空,它会抛出异常。- 返回:
- 这个队列的头
- 抛出:
NoSuchElementException- 如果这个队列是空的
-
poll
E poll()检索并删除此队列的头部,如果此队列为空,则返回null。- 返回:
-
此队列的头部,或
null如果此队列为空
-
element
E element()检索但不删除此队列的头部。此方法与peek的不同之处仅在于,如果此队列为空,它会抛出异常。- 返回:
- 这个队列的头
- 抛出:
NoSuchElementException- 如果这个队列是空的
-
peek
E peek()检索但不删除此队列的头部,如果此队列为空,则返回null。- 返回:
-
此队列的头部,或
null如果此队列为空
-