Queue
public interface Queue<E>
extends Collection<E>
设计用于在处理之前保存元素的集合。 除了基本的 Collection 操作之外,队列还提供了额外的插入、提取和检查操作。 这些方法中的每一种都以两种形式存在:一种在操作失败时抛出异常,另一种返回一个特殊值(null 或 false,取决于操作)。 后一种形式的插入操作是专门为与容量受限的队列实现一起使用而设计的; 在大多数实现中,插入操作不会失败。
队列通常但不一定以 FIFO(先进先出)方式对元素进行排序。 例外情况包括优先级队列,它根据提供的比较器或元素的自然顺序对元素进行排序,以及对元素进行排序的 LIFO 队列(或堆栈) LIFO(后进先出)。 无论使用何种排序,队列的头部都是将通过调用 remove() 或 poll() 删除的元素。 在 FIFO 队列中,所有新元素都插入到队列的尾部。 其他类型的队列可能使用不同的放置规则。 每个 Queue 实现都必须指定其排序属性。
如果可能,offer 方法插入一个元素,否则返回 false。 这与 Collection.add 方法不同,后者只能通过抛出未经检查的异常才能添加元素。 offer 方法设计用于当故障是正常而不是异常发生时使用,例如,在固定容量(或“有界”)队列中。
remove() 和 poll() 方法删除并返回队列的头部。 确切地从队列中删除哪个元素是队列排序策略的函数,该策略因实现而异。 remove() 和 poll() 方法仅在队列为空时的行为不同:remove() 方法抛出异常,而 poll() 方法返回 null。
element() 和 peek() 方法返回但不删除队列的头部。
Queue 接口没有定义并发编程中常见的阻塞队列方法。 这些等待元素出现或空间可用的方法在 BlockingQueue 接口中定义,该接口扩展了该接口。
队列实现通常不允许插入 null 元素,尽管某些实现,例如 LinkedList,不禁止插入 null。 即使在允许的实现中,也不应该将 null 插入到队列中,因为 null 也被 poll 方法用作特殊返回值,以指示队列不包含任何元素。
队列实现通常不定义方法 equals 和 hashCode 的基于元素的版本,而是从类 Object 继承基于标识的版本,因为对于具有相同元素但具有不同排序属性的队列,基于元素的相等性并不总是很好地定义。
此接口是 Java 集合框架的成员。
方法总结
修饰符和类型 | 方法 | 描述 |
---|---|---|
boolean | add(E e) | 如果可以在不违反容量限制的情况下立即将指定元素插入此队列,则在成功时返回 true,如果当前没有可用空间则抛出 IllegalStateException。 |
E | element() | 检索但不删除此队列的头部。 |
boolean | offer(E e) | 如果可以在不违反容量限制的情况下立即插入,则将指定元素插入此队列。 |
E | peek() | 检索但不删除此队列的头部,如果此队列为空,则返回 null。 |
E | poll() | 检索并删除此队列的头部,如果此队列为空,则返回 null。 |
E | remove() | 检索并删除此队列的头部。 |
从接口 java.util.Collection 继承的方法 |
---|
addAll, clear, contains, containsAll, equals, hashCode, isEmpty, iterator, parallelStream, remove, removeAll, removeIf, retainAll, size, spliterator, stream, toArray, toArray |
从接口 java.lang.Iterable 继承的方法 |
---|
forEach |
方法详情
add
boolean add(E e)
如果可以在不违反容量限制的情况下立即将指定元素插入此队列,则在成功时返回 true,如果当前没有可用空间则抛出 IllegalStateException。
指定者:
添加接口CollectionE
参数:
参数名称 | 参数描述 |
---|---|
e | 要添加的元素 |
返回:
true(由 Collection#add 指定)
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalStateException | 如果此时由于容量限制无法添加元素 |
ClassCastException | 如果指定元素的类阻止它被添加到这个队列 |
NullPointerException | 如果指定元素为空且此队列不允许空元素 |
IllegalArgumentException | 如果此元素的某些属性阻止它被添加到此队列中 |
offer
boolean offer(E e)
如果可以在不违反容量限制的情况下立即插入,则将指定元素插入此队列。 当使用容量受限的队列时,这种方法通常比 add(E) 更可取,add(E) 只能通过抛出异常来插入元素失败。
参数:
参数名称 | 参数描述 |
---|---|
e | 要添加的元素 |
返回:
如果元素已添加到此队列,则为 true,否则为 false
Throws:
Throw名称 | Throw描述 |
---|---|
ClassCastException | 如果指定元素的类阻止它被添加到这个队列 |
NullPointerException | 如果指定元素为空且此队列不允许空元素 |
IllegalArgumentException | 如果此元素的某些属性阻止它被添加到此队列中 |
remove
E remove()
检索并删除此队列的头部。 此方法与 poll 的不同之处仅在于如果此队列为空,它将引发异常。
返回:
这个队列的头
Throws:
Throw名称 | Throw描述 |
---|---|
NoSuchElementException | 如果此队列为空 |
poll
E poll()
检索并删除此队列的头部,如果此队列为空,则返回 null。
返回:
此队列的头部,如果此队列为空,则返回 null
element
E element()
检索但不删除此队列的头部。 此方法与 peek 的不同之处仅在于如果此队列为空,它将引发异常。
返回:
这个队列的头
Throws:
Throw名称 | Throw描述 |
---|---|
NoSuchElementException | 如果此队列为空 |
peek
E peek()
检索但不删除此队列的头部,如果此队列为空,则返回 null。
返回:
此队列的头部,如果此队列为空,则返回 null