我需要帮助为基于循环缓冲区的队列选择一个好名称,覆盖旧数据,从而提供无限存储。
如果我仅将其命名为Queue
,它就不会传达重要的细节,即当存储空间已满并将更多项目输入其中时,它会覆盖旧数据。"
一般来说,只有单词Queue
表示具有有限存储空间的FIFO结构。所以,我创建了一个有限的存储FIFO队列,但是基于一个循环缓冲区,只是称它为Queue
。
现在,我想命名这个内部具有有限存储循环缓冲区的无限存储队列,但如果队列已满并且推入了新数据,它会覆盖旧数据。
以下是我内心的辩论:
竞争者: CircularBuffer / CyclicBuffer
想法:不,好吧,可能是。但我不应该告诉他们这是一个队列吗?循环缓冲区是否用于除队列之外的任何其他内容?此外,这是一个实施细节。
竞争者: CircularBufferBasedQueue
的Eee!呸!不!
竞争者: CircularBufferQueue
想法:错误的英语,但原谅这个小小的异常,效果很好。理想情况下,在.NET框架中,如果有这样的实现,它将位于单独的命名空间下,但名称只有Queue
(或System.Collections.CircularBuffer.Queue
),表明它基于它的实现细节离开循环缓冲区(如果有许多其他数据结构基于此,就像我们有SpecializedCollections
,ConcurrentCollections
,Collections.Generic
等,或者如果队列是只有一个使用循环缓冲区的候选者,它将被称为CircularBufferQueue
或CircularBufferedQueue
(不确定添加那个 ed 对该词的含义做了什么)。
对于以CircularBufferXXX
开头的任何名称,我还有一个问题是,拥有循环缓冲区是一个实现细节,因此不应该是名称的一部分。这就像说ArrayBasedLinkedList
。
但是再一次,使用循环缓冲区也传达了重要的行为,而不仅仅是实现存储细节。这种行为,如果仅留在阅读文档的数据结构的用户的危险中,可能是生与死或良好代码与错误代码之间的差异。
竞争者: InfiniteStorageQueue
思考:误导。存储不是无限的。它只是覆盖旧数据,因此您可以继续写作而不必担心会遇到死胡同。
如果我将其命名为InfiniteStorageQueue
,那么我是否应该将常规队列命名为FiniteStorageQueue
。呸!这看起来并不合适。
您如何对此数据结构进行分类?
答案 0 :(得分:2)
您的描述听起来像直接循环缓冲区的定义,我不确定为什么这个唯一的命名。我会称之为CircularBuffer
。为什么?
但是,如果您确实想要一个新名称,我会选择OverwritingCircularBuffer
。为什么?
然后当然添加一些漂亮的评论,解释它是如何工作的以及它的内存分配大小。 :)