我想通过Java中的一个类来实现FIFO。
是否已经存在这样的类?如果不存在,我该如何实现自己的类呢?
注意:
我在这里找到了一个类:http://www.dcache.org/manuals/cells/docs/api/dmg/util/Fifo.html,但它不包含dmg.util.*。 我不知道是否存在这样一个软件包。
我想通过Java中的一个类来实现FIFO。
是否已经存在这样的类?如果不存在,我该如何实现自己的类呢?
注意:
我在这里找到了一个类:http://www.dcache.org/manuals/cells/docs/api/dmg/util/Fifo.html,但它不包含dmg.util.*。 我不知道是否存在这样一个软件包。
PriorityQueue
和PriorityBlockingQueue
,因为它们不使用FIFO算法。add
(将元素添加到末尾)和removeFirst
(从队列前面移除并返回元素)的LinkedList是最容易使用的。import java.util.LinkedList;
class Test {
public static void main(String args[]) {
char arr[] = {3,1,4,1,5,9,2,6,5,3,5,8,9};
LinkedList<Integer> fifo = new LinkedList<Integer>();
for (int i = 0; i < arr.length; i++)
fifo.add (new Integer (arr[i]));
System.out.print (fifo.removeFirst() + ".");
while (! fifo.isEmpty())
System.out.print (fifo.removeFirst());
System.out.println();
}
}
或者,如果你知道你只想把它当作队列来处理(而不需要链表的额外功能),你可以直接使用Queue
接口本身:
import java.util.LinkedList;
import java.util.Queue;
class Test {
public static void main(String args[]) {
char arr[] = {3,1,4,1,5,9,2,6,5,3,5,8,9};
Queue<Integer> fifo = new LinkedList<Integer>();
for (int i = 0; i < arr.length; i++)
fifo.add (new Integer (arr[i]));
System.out.print (fifo.remove() + ".");
while (! fifo.isEmpty())
System.out.print (fifo.remove());
System.out.println();
}
}
Queue
接口的类,而不必太多修改代码。fifo
的类型更改为Queue
并使用remove()
而不是removeFirst()
,因为后者在Queue
接口中不可用。isEmpty()
仍然可以,因为它属于Collection
接口,而Queue
是其派生。尝试使用ArrayDeque
或LinkedList
,它们都实现了Queue
接口。
http://docs.oracle.com/javase/6/docs/api/java/util/ArrayDeque.html
现在不确定你们称呼 FIFO 是什么,因为队列是 FILO。但当我还是学生时,我们使用了简单的Stack<E>
,包括 push、pop 和 peek... 它真的很简单,不需要用队列或其他被认可的答案来使它更加复杂。
for(Object item:queue)
,它将以FIFO方式迭代它们,至少在JDK 7和ArrayDeQueue
和LinkedList
实现中。 - AliPriorityQueue
或者PriorityBlockingQueue
,因为它们不支持FIFO;它们有一种不同的排序算法。此外,如果有人想要“一个简单的FIFO队列”,他们可能也不需要SynchronousQueue
。可以说,他们甚至不需要任何Blocking
队列,虽然这是一个更具争议性的说法。这将选择范围缩小到两个选项:LinkedList
和ArrayDeQueue
! - ToolmakerSteve