API中对队列的说明:
public interface Queue<E> extends Collection<E>
在处理元素前用于保存元素的 collection。除了基本的 Collection 操作外,队列还提供其他的插入、提取和检查操作。每个方法都存在两种形式:一种抛出异常(操作失败时),另一种返回一个特殊值(null 或 false,具体取决于操作)。插入操作的后一种形式是用于专门为有容量限制的 Queue 实现设计的;在大多数实现中,插入操作不会失败。
队列通常(但并非一定)以 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 的实现中,也不应该将 null 插入到 Queue 中,因为 null 也用作 poll 方法的一个特殊返回值,表明队列不包含元素。
Queue 实现通常未定义 equals 和 hashCode 方法的基于元素的版本,而是从 Object 类继承了基于身份的版本,因为对于具有相同元素但有不同排序属性的队列而言,基于元素的相等性并非总是定义良好的。
在java里使用队列可以用LinkedList集合进行模拟
方法
使用LinkedList集合,并使用其中的addLast、removeFirst、isEmpty等API集体模拟队列操作
入队列
void addLast(E e); // 将元素插入此列表的结尾
出队列
E removeFirst(); // 移除并返回列表的第一个元素
判空
boolean isEmpty(); // 判断队列是否为空
示例代码
package coreJavaOne; import java.util.LinkedList; import java.util.NoSuchElementException; public class SimulateQueue { private LinkedList<Integer> queue = new LinkedList<Integer>(); public boolean isEmpty() { return this.queue.isEmpty(); } public void enQueue(int data) { this.queue.addLast(data); } public int deQueue() throws NoSuchElementException { return this.queue.removeFirst(); } public static void main(String[] args) { SimulateQueue q = new SimulateQueue(); q.enQueue(1); q.enQueue(2); q.enQueue(3); while (! q.isEmpty()) { int data = q.deQueue(); System.out.println(data); } } }
问题内容: 列表,队列和集合之间有什么区别? 问题答案: 简单来说: 一个 列表 是一个对象,在同一个对象可能出现不止一次的有序列表。例如:[1,7,1,3,1,1,1,5]。谈论列表中的“第三要素”是有意义的。您可以在列表中的任何位置添加元素,在列表中的任何位置更改元素,或从列表中的任何位置删除元素。 一个 队列 也定购,但你永远只触摸元件的一端。所有元素都在队列的“结尾”处插入,并从队列的“开
队列集合 freeRTOS通过队列集合(Queue Sets)允许任务同时阻塞在多个队列或者信号量上。队列和信号量以集合的形式组织。 注意:尽管在集成第三方的服务时,有时阻塞在多个队列上是必要的,但是还有很多其他的设计模式可以高效完成相同的功能,详细见文章底部部分内容。 使用队列集合 队列集合在使用方法上和select()这类API函数很像,它们都是标准的Berkeley sockets netw
主要内容:1 数组和链表的结构的异同,2 ArrayList和LinkedList的异同,3 栈和队列的模拟,3.1 模拟栈,3.2 模拟队列介绍了数组和链表的区别,ArrayList和LinkedList的区别以及使用LinkedList模拟栈和队列。 1 数组和链表的结构的异同 相同点: 数组和链表都属于线性表,其中数组是属于顺序储存的实现,逻辑存储和物理存储相同而链表则属于链式储存的实现,逻辑存储和物理存储不相同。两种结构均实现数据结构中的逻辑顺序存储。 不同点: 数组: 在内存中是一组连
问题内容: 创建这两个对象有什么区别 和 和之间的实际区别是什么?都是吗?是否存在性能差异或使用理由之间存在差异? 问题答案: 您编写的两条语句分别构造一个对象以容纳字符串列表,然后将其分配给变量。区别在于变量的类型。 通过将赋给type变量,您只能访问接口中可用的方法,其中包括对元素的入队和出队的支持。如果您需要编写一个使用队列进行各种操作并希望通过使用链表实现该队列的程序,这将很有用。 通过将
我一直在研究一种使用LinkedList实现队列的方法。我已经找到了很多例子,它们向我展示了如何通过在类中使用“implements”来做到这一点。但是,我想做的是扩展LinkedList类。例如,我写过这样的东西: 这真的是使用链表类型队列所要做的一切吗?那么,我要如何设置一个头(前面)和一个尾(后面)来像队列一样使用链表呢? 提前谢谢。
我很难理解linkedlist队列的enqueue方法的代码。我理解dequeue()、isEmpty()、First()和size()。首先,这里有一个LinearNode类来创建新的节点对象: 下面是Enqueue方法 在此编辑包含Enqueue方法的LinkQueue类: