我需要一个简单的先进先出(FIFO)队列,用于存储一些整数 (如果是泛型实现也没关系)。
java.util
或 Trove/Guava 库中是否有现成的实现?
我需要一个简单的先进先出(FIFO)队列,用于存储一些整数 (如果是泛型实现也没关系)。
java.util
或 Trove/Guava 库中是否有现成的实现?
LinkedList
。 - John B以下是使用Java内置的先进先出队列(FIFO queue)的示例代码:
public static void main(String[] args) {
Queue<Integer> myQ = new LinkedList<Integer>();
myQ.add(1);
myQ.add(6);
myQ.add(3);
System.out.println(myQ); // 1 6 3
int first = myQ.poll(); // retrieve and remove the first element
System.out.println(first); // 1
System.out.println(myQ); // 6 3
}
ArrayDeque
可能是JDK中最快的基于对象的队列;Trove有 TIntQueue
接口,但我不知道它的实现在哪里。
ArrayDeque
作为队列(先进先出)而不是栈(后进先出)运行,您应该使用add
和remove
。如果您使用push
和pop
,它将表现为一个栈。(严格来说,remove
和pop
是相同的,但由于add/pop
或push/remove
不成对,因此我们选择add/remove
和push/pop
。) - ADTCLinkedList可以用作队列,但您需要正确使用它。以下是示例代码:
@Test
public void testQueue() {
LinkedList<Integer> queue = new LinkedList<>();
queue.add(1);
queue.add(2);
System.out.println(queue.pop());
System.out.println(queue.pop());
}
输出:
1
2
注意,如果您使用push而不是add( 这很可能是您直觉的选择 ),这将在列表前添加元素,使其表现得像一个栈。
因此,仅当与add一起使用时,它才是一个队列。
试试这个:
@Test
public void testQueue() {
LinkedList<Integer> queue = new LinkedList<>();
queue.push(1);
queue.push(2);
System.out.println(queue.pop());
System.out.println(queue.pop());
}
输出:
2
1
Queue
是一个在Java中扩展Collection
接口的接口。它具有支持FIFO
架构所需的所有功能。
对于具体的实现,您可以使用LinkedList
。 LinkedList实现了Deque
,后者又实现了Queue
。所有这些都是java.util
包的一部分。
有关具有示例的方法的详细信息,您可以参考Java中基于FIFO的队列实现。
注:上面的链接指向我的个人博客,其中包含有关此内容的其他详细信息。