2014-11-02 68 views
1

任何人都可以解释我,队列环境中的(线性)环形缓冲区是如何工作的?如何使用环形缓冲区实现队列?到底有什么好处呢 ?为什么使用环形缓冲区?感谢预期。Java中的环形缓冲区(队列)

回答

1

循环缓冲区对于FIFO(先入先出)场景很有用,因此对于具有固定最大大小的队列来说是一个很好的实现策略。

您通常有四个指针:

  • 一个实际缓冲在存储器
  • 一个在存储器中的缓冲区末尾(或:所述缓冲区的大小)
  • 一个指针到开始的有效数据(即索引到数组中)
  • 一个指向有效数据结束的指针。 (即索引到一个数组)

这里是当你添加一个元素(使用数组)会发生什么:

  • 你的(endindex + 1) % bufferSize
  • 位置添加的元素,如果你改写您还需要增加元素(startIndex + 1) % bufferSize

当您从缓冲区中覆盖或删除元素时,始终对队列中最长的元素执行此操作。

这个概念带有不同的用例:一个例子是内存中的日志。

更多实施细节请参考: http://en.wikipedia.org/wiki/Circular_buffer

0

看看java.util.ArrayDeque中实现。