4

我试图找到(或编写)一个代表固定大小、非阻塞、自动丢弃 FIFO 队列的 Java 类。(例如,如果队列的容量为 100,则放置项目 101 会删除项目 1,然后成功附加项目 101。)这个问题的答案似乎很有帮助,但我有一个额外的限制 - 我需要它快,容量约为100-1000。

我的队列中的项目只是浮点数,因此使用链接问题中描述的内容通常更有效AutoDiscardingDeque<Float>,还是仅使用 afloat[]和一些System.arraycopy()操作来处理它?

或者,是否有我没有想到的更好的解决方案?

4

3 回答 3

2

如果您只需要使用浮点数,那么是的,afloat[]在实现中将是最佳的。您根本不需要复制数组 - 只需保持“开始位置”和“结束位置”。您已经知道容量,因此您可以从创建阵列开始,从不让步。

请注意,我并不是建议您在这里使用 afloat[] 而不是队列 - 只是您可以使用a来实现队列float[]。当然,这意味着你不能轻易地让它实现Deque<Float>你可能想要的,而不产生装箱/拆箱成本......但是如果你只在你的客户端代码中使用具体的类,你会结束提高效率节省。

于 2011-02-11T13:08:10.433 回答
1

如果你认为你想要在你的结构上执行一些与数学相关的函数,特别是统计函数,如平均值、最大值、最小值等,那么你可以使用 Apache Commons Math (http://commons.apache) 的 DescriptiveStatistics .org/math/userguide/stat.html#a1.2_Descriptive_statistics)。您可以设置窗口大小,它会自动维护您的元素。但是它需要双打,而不是浮动,所以它可能不是你的完美解决方案。

于 2011-02-11T14:00:56.080 回答
0

我需要它速度快,容量约为 100-1000

请指定,您需要快速执行哪些操作?实施对于您将如何使用它非常明智。如果您需要经常通过索引访问它,那么上面的解决方案似乎就足够了

于 2011-02-11T13:09:46.823 回答