2014-11-02 105 views
1

任何人都可以解釋我,隊列環境中的(線性)環形緩衝區是如何工作的?如何使用環形緩衝區實現隊列?到底有什麼好處呢 ?爲什麼使用環形緩衝區?感謝預期。Java中的環形緩衝區(隊列)

回答

1

循環緩衝區對於FIFO(先入先出)場景很有用,因此對於具有固定最大大小的隊列來說是一個很好的實現策略。

您通常有四個指針:

  • 一個實際緩衝在存儲器
  • 一個在存儲器中的緩衝區末尾(或:所述緩衝區的大小)
  • 一個指針到開始的有效數據(即索引到數組中)
  • 一個指向有效數據結束的指針。 (即索引到一個數組)

這裏是當你添加一個元素(使用數組)會發生什麼:

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

當您從緩衝區中覆蓋或刪除元素時,始終對隊列中最長的元素執行此操作。

這個概念帶有不同的用例:一個例子是內存中的日誌。

更多實施細節請參考: http://en.wikipedia.org/wiki/Circular_buffer

0

看看java.util.ArrayDeque中實現。