【发布时间】:2016-10-21 03:55:20
【问题描述】:
我需要帮助为基于循环缓冲区、覆盖旧数据并因此提供无限存储的队列选择一个好名称。
如果我将它命名为Queue,它不会传达“当存储已满时它会覆盖旧数据并且您将更多项目推入其中”的重要细节。
一般来说,只是Queue这个词表示一个有限存储的FIFO结构。因此,我创建了一个有限存储 FIFO 队列,但基于循环缓冲区,并将其命名为 Queue。
现在,我想命名这个无限存储队列,它内部有一个有限的存储循环缓冲区,但如果队列已满并推入新数据,它会覆盖旧数据。
这是我脑海中正在进行的内部辩论:
竞争者: CircularBuffer / CyclicBuffer
想法:不。好吧,可能是。但我不应该告诉他们这是一个队列吗?循环缓冲区是否用于队列以外的任何其他内容?此外,这是一个实现细节。
竞争者: CircularBufferBasedQueue
哎呀!呸!不!
竞争者: CircularBufferQueue
想法: 错误的英语,但原谅了那个小异常,效果很好。理想情况下,在 .NET 框架中,如果存在这样的实现,它要么位于单独的命名空间下,但名称仅为 Queue(或 System.Collections.CircularBuffer.Queue),表明此实现细节基于循环缓冲区(如果有许多其他基于此的数据结构,就像我们有 SpecializedCollections、ConcurrentCollections、Collections.Generic 等等)或者如果队列是唯一一个使用循环缓冲区的候选者,它会被称为CircularBufferQueue 或CircularBufferedQueue(不确定添加那个小ed 对单词的含义有什么作用)。
我反对任何以CircularBufferXXX 开头的名称的另一件事是,拥有循环缓冲区是一个实现细节,因此不应成为名称的一部分。这就像说,ArrayBasedLinkedList。
但话又说回来,拥有一个循环缓冲区也传达了重要的行为,而不仅仅是实现存储细节。这种行为,如果只是让这个数据结构的用户阅读文档的危险,可能是生与死或好代码和坏代码之间的区别。
竞争者: InfiniteStorageQueue
想法: 误导。存储不是无限的。只是它会覆盖旧数据,因此您可以继续写入而不必担心遇到死胡同。
如果我将其命名为InfiniteStorageQueue,那么我是否应该将常规队列命名为FiniteStorageQueue。呸!只是看起来不太好。
你会如何分类这个数据结构?
【问题讨论】:
-
那是LRU cache。
-
有趣。看着那个。
标签: data-structures computer-science