Queue
设计用于在处理之前存放元素的集合。除了基本的Collection
操作之外,队列还提供其他插入,提取和检查操作。这些方法均以两种形式存在:一种在操作失败时引发异常,另一种返回特殊值(null
或false
,具体取决于操作)。插入操作的后一种形式是专门为与有限容量的Queue
实现一起使用而设计的;在大多数实现中,插入操作不会失败。
Queue
方法摘要:
抛出异常 | 返回特殊值 | |
---|---|---|
插入 | add(e) |
offer(e) |
删除 | remove() |
poll() |
检索 | element() |
peek() |
队列通常但不一定以FIFO(先进先出)的方式对元素进行排序。例外情况包括优先级队列(根据提供的比较器对元素进行排序或元素的自然排序)和LIFO(后进先出)队列(或堆栈)。无论使用哪种排序,队列的head都是通过调用remove()
或poll()
来删除的元素。在FIFO队列中,所有新元素都插入到队列的尾部。其他种类的队列可能使用不同的放置规则。每个Queue
实现都必须指定其排序属性。
offer
方法在可能的情况下插入一个元素,否则返回false
。这与Collection.add
方法不同,该方法只能通过引发未经检查的异常来表示添加元素失败。offer
方法被设计用于在正常情况下(而不是在例外情况下)发生故障(例如在固定容量(或“有界”)队列中)时使用。
remove()
和poll()
方法删除并返回队列的开头(head)。确切地说,从队列中删除哪个元素是队列的排序策略决定的,不同实现的实现方法不同。remove()
和poll()
方法的区别仅在于队列为空时它们的行为:remove()
方法引发异常,而poll()
方法返回null
。
element()
和peek()
方法返回(但不删除)队列头(head)。
Queue
接口未定义在并发编程中常见的阻塞队列方法。这些等待元素出现或空间可用的方法在java.util.concurrent.BlockingQueue
接口中进行了定义,该接口扩展了Queue
接口。
Queue
实现通常不允许插入null
元素,尽管某些实现(例如LinkedList
)不禁止插入null
。即使在允许的实现中,也不应将null
插入Queue
中,因为poll
方法也将null
用作特殊的返回值,以指示队列不包含任何元素。
Queue
实现通常不定义equals
和hashCode
方法基于元素的版本,而是从类Object
继承基于身份的版本,因为基于元素的相等性并不总是明确定义对于具有相同元素但排序属性不同的队列。
该接口也是Java集合框架的成员。
如果可以立即将指定的元素插入此队列,而不会违反容量限制,则在成功后返回true
,如果当前没有可用空间,则抛出IllegalStateException
。
如果不会违反容量限制可以立即将指定的元素插入此队列。当使用容量受限的队列时,此方法通常比add
更可取,后者插入元素时只能通过引发异常来标识无法插入。
检索并删除此队列的头。此方法与poll
的不同之处仅在于,如果此队列为空,它将引发异常。
检索并删除此队列的开头,如果此队列为空,则返回null
。
检索但不删除此队列的头。此方法与peek
的不同之处仅在于,如果此队列为空,它将引发异常。
检索但不删除此队列的开头,如果此队列为空,则返回null
。