【问题标题】:What's a good name for a circular buffer based queue that overwrote old data when full?基于循环缓冲区的队列在满时覆盖旧数据的好名字是什么?
【发布时间】:2016-10-21 03:55:20
【问题描述】:

我需要帮助为基于循环缓冲区、覆盖旧数据并因此提供无限存储的队列选择一个好名称。

如果我将它命名为Queue,它不会传达“当存储已满时它会覆盖旧数据并且您将更多项目推入其中”的重要细节。

一般来说,只是Queue这个词表示一个有限存储的FIFO结构。因此,我创建了一个有限存储 FIFO 队列,但基于循环缓冲区,并将其命名为 Queue

现在,我想命名这个无限存储队列,它内部有一个有限的存储循环缓冲区,但如果队列已满并推入新数据,它会覆盖旧数据。

这是我脑海中正在进行的内部辩论:

竞争者: CircularBuffer / CyclicBuffer 想法:不。好吧,可能是。但我不应该告诉他们这是一个队列吗?循环缓冲区是否用于队列以外的任何其他内容?此外,这是一个实现细节。

竞争者: CircularBufferBasedQueue 哎呀!呸!不!

竞争者: CircularBufferQueue 想法: 错误的英语,但原谅了那个小异常,效果很好。理想情况下,在 .NET 框架中,如果存在这样的实现,它要么位于单独的命名空间下,但名称仅为 Queue(或 System.Collections.CircularBuffer.Queue),表明此实现细节基于循环缓冲区(如果有许多其他基于此的数据结构,就像我们有 SpecializedCollectionsConcurrentCollectionsCollections.Generic 等等)或者如果队列是唯一一个使用循环缓冲区的候选者,它会被称为CircularBufferQueueCircularBufferedQueue(不确定添加那个小ed 对单词的含义有什么作用)。

我反对任何以CircularBufferXXX 开头的名称的另一件事是,拥有循环缓冲区是一个实现细节,因此不应成为名称的一部分。这就像说,ArrayBasedLinkedList

但话又说回来,拥有一个循环缓冲区也传达了重要的行为,而不仅仅是实现存储细节。这种行为,如果只是让这个数据结构的用户阅读文档的危险,可能是生与死或好代码和坏代码之间的区别。

竞争者: InfiniteStorageQueue 想法: 误导。存储不是无限的。只是它会覆盖旧数据,因此您可以继续写入而不必担心遇到死胡同。

如果我将其命名为InfiniteStorageQueue,那么我是否应该将常规队列命名为FiniteStorageQueue。呸!只是看起来不太好。

你会如何分类这个数据结构?

【问题讨论】:

  • 那是LRU cache
  • 有趣。看着那个。

标签: data-structures computer-science


【解决方案1】:

您的描述听起来像是一个直接向上的循环缓冲区的定义,我不确定为什么要使用唯一的命名。我就叫它CircularBuffer。为什么?

  1. 循环缓冲区被定义为具有固定大小。
  2. 循环缓冲区被实现为队列数据结构。
  3. 标准化名称易于理解和搜索。

但是,如果您确实想要一个新名称,我会选择 OverwritingCircularBuffer。为什么?

  1. 我们知道它是一个循环缓冲区,所以它的大小是固定的。
  2. 我们知道它会覆盖名称中的数据。
  3. 我们知道它将是一个队列数据结构。

然后当然添加一些漂亮的 cmets 来解释它是如何工作的以及它的内存分配大小。 :)

【讨论】:

  • 我最终得到了CircularBuffer
猜你喜欢
  • 1970-01-01
  • 2020-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-08
  • 2014-01-20
  • 1970-01-01
相关资源
最近更新 更多