我需要一个简单的FIFO实现队列来存储一堆int(如果它是泛型实现,我不介意)。
java.util
或Trove / Guava图库中已经为我烘焙了什么?
答案 0 :(得分:75)
呀。 Queue
LinkedList是最琐碎的具体实施。
答案 1 :(得分:51)
以下是使用java的内置FIFO队列的示例代码:
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
}
答案 2 :(得分:12)
ArrayDeque
可能是JDK中最快的基于对象的队列; Trove有TIntQueue
界面,但我不知道它的实现在哪里。
答案 3 :(得分:5)
Queue
是一个在Java中扩展Collection
的接口。它具有支持FIFO
架构所需的所有功能。
对于具体实施,您可以使用LinkedList
。 LinkedList实现Deque
,后者又实现Queue
。所有这些都是java.util
包的一部分。
有关带有示例示例的方法的详细信息,请参阅FIFO based Queue implementation in Java。
PS:以上链接转到我的个人博客,其中包含有关此内容的其他详细信息。
答案 4 :(得分:0)
LinkedList可以用作队列-但您需要正确使用它。这是一个示例代码:
@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