我想通过Java中的类实现FIFO。
这样的课程是否已经存在?如果没有,我该如何实现自己的?
注意
我在这里找到了一个班级http://www.dcache.org/manuals/cells/docs/api/dmg/util/Fifo.html,但它没有包含dmg.util。*。我不知道这样的包裹是否存在。
答案 0 :(得分:111)
您正在寻找任何实现Queue interface的类,不包括PriorityQueue
和PriorityBlockingQueue
,不使用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)
尝试ArrayDeque
或LinkedList
,它们都实现了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复杂化,也无需接受公认的答案即可。