基于FIFO的队列实现?

时间:2012-04-18 16:23:29

标签: java collections queue

我需要一个简单的FIFO实现队列来存储一堆int(如果它是泛型实现,我不介意)。

java.util或Trove / Guava图库中已经为我烘焙了什么?

5 个答案:

答案 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