为此系列命名

时间:2015-09-24 21:06:44

标签: java collections

这个问题与语言无关(尽管它假设一个既是程序性的又是OO)。

我无法找到具有以下行为的集合的标准名称:

- N个元素的固定容量,保持插入顺序。

-Elements被添加到'Tail'

- 无论何时添加项目,都会返回集合的头部(FIFO),但不一定要删除。

- 如果该集合现在包含多于N个元素,则删除头部 - 否则它将保留在集合中(现在已进一步朝向最终删除)。

我经常使用这种结构来保持运行计数 - 即过去N帧的帧长度,以便提供我可以平均,求和等的“移动窗口”。

2 个答案:

答案 0 :(得分:5)

听起来和我circular buffer非常相似;除了您可能未定义或过度约束添加/删除行为。

请注意,循环缓冲区有两个“视图”。一个是布局视图,其中有一段内存被写入,带有“head”和“tail”索引,以及当尾部“在”头部之前“缠绕”一些逻辑。另一个是一个“逻辑”视图,你的队列没有暴露它的布局方式,但肯定有一个有限数量的插槽可以“增长到”。

在进行计算的环境中,有一个我喜欢的非常长期的项目(尽管如果你不习惯这样的事情,cli界面有点外来)。它被称为RoundRobinDatabase,其中每个数据库准确存储单个值的N个副本(提供图形,平均值等)。它根据许多参数调整下一个bin,但最常见的是它会根据时间推进bin。它通常是大量网络吞吐量图背后的工具,它具有可配置的bin冲突解决方案等。

一般来说,对最后“一些”条目敏感的算法通常被称为“滑动框”算法,但这侧重于算法,而不是数据结构:)

答案 1 :(得分:1)

编程谜语听起来像是 circular linked list

嗯,所有这些描述都适合,不是吗?

•N个元素的固定容量,保持插入顺序。

•元素被添加到“尾巴”

•每当添加一个项目时,都会返回集合的头部(FIFO),但不一定要删除。

这个包含计算框架的源代码的链接也可能有帮助: frameCounter