- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
队列是先进先出 (FIFO) 数据结构。它模拟了现实生活中的队列。是的,您可能在电影院、购物中心、地铁或公共汽车前看到过的那种。
就像现实生活中的队列一样,队列数据结构中的新元素在后面添加并从前面删除。可以将队列可视化,如下图所示。
在Queue后面添加一个元素的过程称为Enqueue,从Queue前面移除一个元素的过程称为Dequeue。
Java 提供了一个 Queue 接口,它是 Java 集合框架的一部分。下图描述了 Queue 接口在 Collections 层次结构中的位置
Java中的队列只是一个接口。我们需要在我们的程序中使用 Queue 接口的具体实现。
如上图所示,LinkedList 类实现了 Queue 接口,因此可以用作 Queue。
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
// Create and initialize a Queue using a LinkedList
Queue<String> waitingQueue = new LinkedList<>();
// Adding new elements to the Queue (The Enqueue operation)
waitingQueue.add("Rajeev");
waitingQueue.add("Chris");
waitingQueue.add("John");
waitingQueue.add("Mark");
waitingQueue.add("Steven");
System.out.println("WaitingQueue : " + waitingQueue);
// Removing an element from the Queue using remove() (The Dequeue operation)
// The remove() method throws NoSuchElementException if the Queue is empty
String name = waitingQueue.remove();
System.out.println("Removed from WaitingQueue : " + name + " | New WaitingQueue : " + waitingQueue);
// Removing an element from the Queue using poll()
// The poll() method is similar to remove() except that it returns null if the Queue is empty.
name = waitingQueue.poll();
System.out.println("Removed from WaitingQueue : " + name + " | New WaitingQueue : " + waitingQueue);
}
}
# Output
WaitingQueue : [Rajeev, Chris, John, Mark, Steven]
Removed from WaitingQueue : Rajeev | New WaitingQueue : [Chris, John, Mark, Steven]
Removed from WaitingQueue : Chris | New WaitingQueue : [John, Mark, Steven]
import java.util.LinkedList;
import java.util.Queue;
public class QueueSizeSearchFrontExample {
public static void main(String[] args) {
Queue<String> waitingQueue = new LinkedList<>();
waitingQueue.add("Jennifer");
waitingQueue.add("Angelina");
waitingQueue.add("Johnny");
waitingQueue.add("Sachin");
System.out.println("WaitingQueue : " + waitingQueue);
// Check is a Queue is empty
System.out.println("is waitingQueue empty? : " + waitingQueue.isEmpty());
// Find the size of the Queue
System.out.println("Size of waitingQueue : " + waitingQueue.size());
// Check if the Queue contains an element
String name = "Johnny";
if(waitingQueue.contains(name)) {
System.out.println("WaitingQueue contains " + name);
} else {
System.out.println("Waiting Queue doesn't contain " + name);
}
// Get the element at the front of the Queue without removing it using element()
// The element() method throws NoSuchElementException if the Queue is empty
String firstPersonInTheWaitingQueue = waitingQueue.element();
System.out.println("First Person in the Waiting Queue (element()) : " + firstPersonInTheWaitingQueue);
// Get the element at the front of the Queue without removing it using peek()
// The peek() method is similar to element() except that it returns null if the Queue is empty
firstPersonInTheWaitingQueue = waitingQueue.peek();
System.out.println("First Person in the Waiting Queue : " + firstPersonInTheWaitingQueue);
}
}
# Output
WaitingQueue : [Jennifer, Angelina, Johnny, Sachin]
is waitingQueue empty? : false
Size of waitingQueue : 4
WaitingQueue contains Johnny
First Person in the Waiting Queue (element()) : Jennifer
First Person in the Waiting Queue : Jennifer
本节中的示例显示了迭代队列的各种方法:
队列中的迭代顺序与插入顺序相同。
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Queue;
public class IterateOverQueueExample {
public static void main(String[] args) {
Queue<String> waitingQueue = new LinkedList<>();
waitingQueue.add("John");
waitingQueue.add("Brad");
waitingQueue.add("Angelina");
waitingQueue.add("Julia");
System.out.println("=== Iterating over a Queue using Java 8 forEach() ===");
waitingQueue.forEach(name -> {
System.out.println(name);
});
System.out.println("\n=== Iterating over a Queue using iterator() ===");
Iterator<String> waitingQueueIterator = waitingQueue.iterator();
while (waitingQueueIterator.hasNext()) {
String name = waitingQueueIterator.next();
System.out.println(name);
}
System.out.println("\n=== Iterating over a Queue using iterator() and Java 8 forEachRemaining() ===");
waitingQueueIterator = waitingQueue.iterator();
waitingQueueIterator.forEachRemaining(name -> {
System.out.println(name);
});
System.out.println("\n=== Iterating over a Queue using simple for-each loop ===");
for(String name: waitingQueue) {
System.out.println(name);
}
}
}
# Output
=== Iterating over a Queue using Java 8 forEach() ===
John
Brad
Angelina
Julia
=== Iterating over a Queue using iterator() ===
John
Brad
Angelina
Julia
=== Iterating over a Queue using iterator() and Java 8 forEachRemaining() ===
John
Brad
Angelina
Julia
=== Iterating over a Queue using simple for-each loop ===
John
Brad
Angelina
Julia
这就是所有人!在本文中,您了解了什么是 Queue 数据结构,如何在 Java 中创建 Queue,如何向 Queue 添加新元素,如何从 Queue 中删除元素,以及如何在 Queue 中搜索元素。
我试图弄清楚以下模块正在做什么。 import Queue import multiprocessing import threading class BufferedReadQueue(Queue.
如果我使用 Queue.Queue,那么我的 read() 函数不起作用,为什么?但是,如果我使用 multiprocessing.Queue,它运行良好: from multiprocessing
我正在寻找比我在文档中找到的更多关于 Python 队列实现的见解。 根据我的理解,如果我在这方面有误,请原谅我的无知: queue.Queue():通过内存中的基本数组实现,因此不能在多个进程之间共
当我使用多处理模块(Windows 上的 Python 2.7)中的队列代替 Queue.Queue 时,我的程序没有完全关闭。 最终,我想使用 multiprocessing.Process 处理
阅读了大量的 JavaScript 事件循环教程,我看到了不同的术语来标识队列存储消息,当调用堆栈为空时,事件循环准备好获取消息: 队列 消息队列 事件队列 我找不到规范的术语来识别它。 甚至 MDN
我收到错误消息“类型队列不接受参数”。当我将更改队列行替换为 PriorityQueue 时,此错误消失并且编译正常。有什么区别以及如何将其更改为编译队列和常规队列? import java.util
如何将项目返回到 queue.Queue?如果任务失败,这在线程或多处理中很有用,这样任务就不会丢失。 docs for queue.Queue.get()说函数可以“从队列中删除并返回一个项目”,但
如何在多个 queue.Queue 上进行“选择”同时? Golang 有 desired feature及其 channel : select { case i1 = 声明。 线程:queue 模
http://docs.python.org/2/library/queue.html#Queue.Queue.put 这似乎是一个幼稚的问题,但我在文档和谷歌搜索中都没有找到答案,那么这些方法是线程
这可能是个愚蠢的问题,但我对与 .dequeue() 和 $.queue() 一起使用的 .queue() 感到困惑> 或 jquery.queue()。 它们是否相同,如果是,为什么 jquery
我正在尝试创建一个线程化的 tcp 流处理程序类线程和主线程对话,但是 Queue.Queue 也没有做我需要的,服务器从另一个程序接收数据,我只想传递它进入主线程进行处理这里是我到目前为止的代码:
The principal challenge of multi-threaded applications is coordinating threads that share data or ot
在Queue模块的queue类中,有几个方法,分别是qsize、empty 和 full,其文档声称它们“不可靠”。 他们到底有什么不可靠的地方? 我确实注意到 on the Python docs网
我需要一个队列,多个线程可以将内容放入其中,并且多个线程可以从中读取。 Python 至少有两个队列类,Queue.Queue 和 collections.deque,前者似乎在内部使用后者。两者都在
明天我将介绍我选择进程内消息队列实现的基本原理,但我无法阐明我的推理。我的合作设计者提议我们实现一个简单的异步队列,只使用基本的作业列表和互斥锁来控制访问,我建议在嵌入式模式下使用 ActiveMQ。
在 scala 中定义了一个特征: trait Queue[T] Queue 是一种类型吗?或其他东西,例如类型构造函数? 来自 http://artima.com/pins1ed/type-para
我看到 SML/NJ 包含一个队列结构。我不知道如何使用它。如何使用 SML/NJ 提供的附加库? 最佳答案 Queue structure SML '97 未指定,但它存在于 SML/NJ 的顶级环
我是 D3 和 JavaScript 的新手。 我试图理解其中的 queue.js。 我已经完成了 this关联。但是仍然无法清楚地了解 queue.await() 和 queue.awaitAll(
所以我试图在我的 main.cpp 文件中调用一个函数,但我得到“错误:没有匹配函数来调用‘Queue::Queue()。” 队列.h #ifndef QUEUE_H #define QUEUE_H
假设我有一个 10 行的二维 numpy 数组 例如 array([[ 23425. , 521331.40625], [ 23465. , 521246.03125],
我是一名优秀的程序员,十分优秀!