当前位置: 首页 > 面试题库 >

Java中的FIFO类

祁建明
2023-03-14
问题内容

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

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

注意

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


问题答案:

您正在寻找实现Queue接口的任何类,排除PriorityQueuePriorityBlockingQueue不使用FIFO算法。

可能使用(最前面添加一个)和(从前面删除一个然后返回)的LinkedList是最容易使用的一个。add``removeFirst

例如,这是一个使用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接口的任何类替换基础的具体类,而不必过多地更改代码。

基本更改是将的类型更改为fifoQueue并使用remove()代替removeFirst(),后者对于Queue接口不可用。

调用isEmpty()仍然可以,因为它属于CollectionQueue派生接口。



 类似资料:
  • 问题内容: 考虑以下代码: writer.c reader.c 我的问题是: 由于事先不知道foo和bar将有多少个字节,我如何知道要从reader.c读取多少个字节? 因为例如,如果我在reader中读取10个字节,而foo和bar小于10个字节,那么我会将它们都放在同一个变量中,而这是我不希望的。 理想情况下,我将对每个变量都具有一个读取功能,但是我又一次事先不知道数据将具有多少字节。 我考虑

  • MySQL fifo Plugin 是数据库与其他第三方应用程序进程间通信解决方案。 1. 背景 你是否有这样的需求: 你需要监控访问网站的IP,当同一个IP地址访问次数过多需要做出处理,例如拉黑,直接丢进iptables 防火墙规则连中。你的做法只能每个一段时间查询一次数据库,并且判断是否满足拉黑需求? 你是否需要监控某些数据发生变化,并通知其他程序作出处理。例如新闻内容修改后,需要立即做新页面

  • 问题内容: 有什么方法可以用Go语言创建Unix FIFO?没有,也没有在包装,虽然我预期命名的FIFO在很大程度上是在POSIX操作系统的使用。实际上,有一个用于创建未命名FIFO(管道)的功能,但是没有用于创建命名管道的功能。 我是唯一需要他们的人吗? 问题答案: 为了使其能够在Linux上运行,我只是做了一个 它似乎可以解决问题。 这是基础mknod()调用的参考

  • 主要内容:FIFO 原理,FIFO 设计,实例,实例,实例,实例,实例FIFO(First In First Out)是异步数据传输时经常使用的存储器。该存储器的特点是数据先进先出(后进后出)。其实,多位宽数据的异步传输问题,无论是从快时钟到慢时钟域,还是从慢时钟到快时钟域,都可以使用 FIFO 处理。 FIFO 原理 工作流程 复位之后,在写时钟和状态信号的控制下,数据写入 FIFO 中。RAM 的写地址从 0 开始,每写一次数据写地址指针加一,指向下一个存储单元

  • 我们正在使用AMAZON SQS FIFO队列来处理我们应用程序的预约服务。一旦消息进入队列,它就会触发Amazon Lambda函数来管理预订过程。因为它是一个FIFO队列,所以我们确保如果有2个人请求相同的插槽,那么这个插槽将给第一个请求者。我的问题是:是否有一种方法(也许是SQS FIFO队列中的设置?)这确保了在前一条消息执行完毕之前,一条消息不会触发Amazon Lambda函数。我只是

  • 我需要一个简单的FIFO实现的队列来存储一堆整数(我不介意它是泛型实现)。 在或Trove/Guava库中已经为我烘焙了什么?