数据集合的最佳数据结构,每次迭代之间只有更改

时间:2014-08-16 11:31:46

标签: java performance signal-processing

我正在实现短时傅里叶变换,每帧之间有70%的重叠(每帧256个样本)。因为在每次迭代之间只有前75个样本的变化,我正在伤害JAVA中实现这一点的最佳方法。意味着什么是删除前70个样本并在java中附加新的70个样本的最快方法?

2 个答案:

答案 0 :(得分:2)

这听起来像是循环缓冲区的工作。

以下是复制/粘贴的简单实现:Circular Array List for Java

以下是Apache Commons CollectionsCircularFifoQueue中的一个。

答案 1 :(得分:1)

您需要某种Queue集合,它允许您删除最旧的元素(位于队列顶部)并添加新元素。

LinkedListQueue的可能实现方式。使用addaddAll向末尾添加元素,使用remove删除列表中的第一个元素。

如果要创建自己的自定义数据结构,则长度有限的循环队列(在您的情况下为256)将是理想的。每次添加新样本时,这样的队列都会覆盖旧样本。我没有在Java API中找到现有的这样的数据结构。

编辑:您没有指定每个样本包含的数据类型。如果它是一个原始的 - 加倍 - 如maaartinus评论中所建议的那样,你可能最好不要使用Java的标准集合,因为它们在用于存储基元时涉及装箱开销。相反,您可以按照私密段落中的建议创建自己的循环队列。正如maaartinus建议的那样,它可以由数组double[256]支持,这将非常有效。