Java中的环形缓冲区(队列)

时间:2014-11-02 12:35:01

标签: java buffer

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

2 个答案:

答案 0 :(得分:1)

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

你通常有四个指针:

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

添加元素(使用数组)时会发生以下情况:

  • 您在(endindex + 1) % bufferSize
  • 的位置添加元素
  • 如果您覆盖某个元素,则还需要增加(startIndex + 1) % bufferSize

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

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

有关更多实施细节,请参阅: http://en.wikipedia.org/wiki/Circular_buffer

答案 1 :(得分:0)

看一下java.util.ArrayDeque的实现。