基于 FIFO 的队列实现 FIFO? ?

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

java.util或者 Trove/Guava 图书馆有什么已经为我烤好的吗?

183515 次浏览

Yeah. Queue

LinkedList being the most trivial concrete implementation.

ArrayDeque is probably the fastest object-based queue in the JDK; Trove has the TIntQueue interface, but I don't know where its implementations live.

Here is example code for usage of java's built-in 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
}

Queue is an interface that extends Collection in Java. It has all the functions needed to support FIFO architecture.

For concrete implementation you may use LinkedList. LinkedList implements Deque which in turn implements Queue. All of these are a part of java.util package.

For details about method with sample example you can refer FIFO based Queue implementation in Java.

PS: Above link goes to my personal blog that has additional details on this.

A LinkedList can be used as a Queue - but you need to use it right. Here is an example code :

@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());
}

Output :

1
2

Remember, if you use push instead of add ( which you will very likely do intuitively ), this will add element at the front of the list, making it behave like a stack.

So this is a Queue only if used in conjunction with add.

Try this :

@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());
}

Output :

2
1