基于FIFO的队列实现?

Raj*_*pta 70 java queue collections

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

在我java.util或Trove/Guava图书馆里为我准备过的东西了吗?

Joh*_*n B 78

是啊.队列

LinkedList是最简单的具体实现.

  • 请注意,Javadoc列出了所有实现.此外,它上面的第二个链接为`LinkedList` (5认同)
  • 实际上并非如此:根据javadoc,Queue不一定是FIFO:http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html.LinkedList可以用作队列,因为订单是固定的. (3认同)
  • `LinkedList`不是接口; 这是一个明确的课程.或者,`ArrayDeque`通常更快. (2认同)

Dav*_*dNg 54

以下是使用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
}
Run Code Online (Sandbox Code Playgroud)


Lou*_*man 13

ArrayDeque可能是JDK中最快的基于对象的队列; Trove有TIntQueue接口,但我不知道它的实现在哪里.

  • 对于`ArrayDeque`作为队列(FIFO)而不是堆栈(LIFO),你应该使用`add`和`remove`.如果使用`push`和`pop`,它就像堆栈一样.(严格来说,`remove`和`pop`是一样的,但是因为`add/pop`或`push/remove`听起来并不合适,所以我们选择`add/remove`和`push/pop` .) (8认同)

Gau*_*tam 7

一个链表可以作为一个队列-但你需要使用它的权利。这是一个示例代码:

@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());
}
Run Code Online (Sandbox Code Playgroud)

输出 :

1
2
Run Code Online (Sandbox Code Playgroud)

请记住,如果您使用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());
}
Run Code Online (Sandbox Code Playgroud)

输出 :

2
1
Run Code Online (Sandbox Code Playgroud)


Ani*_*kur 5

QueueCollection在Java 中扩展的接口。它具有支持FIFO体系结构所需的所有功能。

对于具体的实现,您可以使用LinkedList。LinkedList实现Deque,该实现又实现Queue。所有这些都是java.util包装的一部分。

有关示例示例方法的详细信息,可以参考Java中基于FIFO的队列实现

PS:上面的链接转到我的个人博客,其中包含有关此主题的更多详细信息。