Java 中的 FIFO 类

2022-08-31 14:19:17

我想通过Java中的类实现FIFO。

这样的类已经存在了吗?如果没有,我该如何实现我自己的?

注意

我在这里找到了一个 http://www.dcache.org/manuals/cells/docs/api/dmg/util/Fifo.html 类,但它不包含dmg.util.*。我不知道这样的软件包是否存在。


答案 1

您正在寻找任何实现队列接口的类,不包括 不使用 FIFO 算法的 和。PriorityQueuePriorityBlockingQueue

可能LinkedList使用(在末尾添加一个)和(从前面删除一个并返回它)是最容易使用的。addremoveFirst

例如,下面是一个使用 LinkedList 对 PI 进行排队和检索数字的程序:

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

基本更改是将 的类型更改为 a 并使用,而不是 ,后者对接口不可用。fifoQueueremove()removeFirst()Queue

调用仍然是可以的,因为它属于其接口是衍生物。isEmpty()CollectionQueue


答案 2

尝试 或 ,两者都实现接口。ArrayDequeLinkedListQueue

http://docs.oracle.com/javase/6/docs/api/java/util/ArrayDeque.html


推荐