Java中的FIFO类

时间:2012-03-06 08:50:08

标签: java fifo

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

这样的课程是否已经存在?如果没有,我该如何实现自己的?

注意

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

7 个答案:

答案 0 :(得分:111)

您正在寻找任何实现Queue interface的类,不包括PriorityQueuePriorityBlockingQueue,不使用FIFO算法。

可能add使用removeFirst(在结尾添加一个)和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(); } } (从前面删除一个并将其返回)是最容易使用的。{/ p>

例如,这是一个程序,它使用LinkedList来排队和检索PI的数字:

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() } interface。

调用Collection仍然可以,因为它属于Queue接口{{1}}是派生的。

答案 1 :(得分:16)

尝试ArrayDequeLinkedList,它们都实现了Queue界面。

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

答案 2 :(得分:2)

Queue是First In First Out结构。您的请求非常模糊,但我猜您只需要通常与Queue结构一起出现的基本功能。您可以看一下如何实现它here

关于您丢失的软件包,很可能是因为您需要按照该教程自行下载或创建软件包。

答案 3 :(得分:1)

您不必实现自己的FIFO队列,只需查看接口java.util.Queue及其实现

答案 4 :(得分:1)

如果您想要管道来写/读数据,可以使用http://docs.oracle.com/javase/6/docs/api/java/io/PipedWriter.html

答案 5 :(得分:0)

您可以使用LinkedBlockingQueue我在我的项目中使用它。它是标准java的一部分而且非常easy to use

答案 6 :(得分:0)

由于Queue是FILO,所以不确定这几天您叫什么FIFO,但是当我还是学生时,我们将 import os from slack_sdk import WebClient from slack_sdk.errors import SlackApiError client = WebClient(token=os.environ['SLACK_BOT_TOKEN']) try: filepath="./tmp.txt" response = client.files_upload(channels='#random', file=filepath) assert response["file"] # the uploaded file except SlackApiError as e: # You will get a SlackApiError if "ok" is False assert e.response["ok"] is False assert e.response["error"] # str like 'invalid_auth', 'channel_not_found' print(f"Got an error: {e.response['error']}") 与简单的 push 一起使用,< em> pop 和 peek ...确实如此简单,无需进一步使Queue复杂化,也无需接受公认的答案即可。