2015-06-23 60 views
0

我在理解CircularFifoQueue類如何工作方面有點麻煩。所以對於我的要求,我需要一個固定尺寸的FIFO隊列(約6000個元素)。首先我使用了ArrayDequeue,但它表現得相當糟糕。然後我閱讀了CircularFifoQueue並試用了它。我可以看到性能提升,但仍然不快。Java CircularFifoQueue的性能

我的問題是現在:如果隊列滿了,我添加一個元素會發生什麼?整個底層數組是否被複制?是否有一些偏移量會被設置,例如

head = (head + 1) % size; 

如果後者是這種情況,那麼我想我的算法表現不佳。

謝謝!

+0

你有沒有試過並保證它?據我可以看到[源](https://commons.apache.org/proper/commons-collections/cobertura/org.apache.commons.collections4.queue.CircularFifoQueue.html):當添加一個新的元素到一個完整列表remove()方法被調用,從而刪除一個元素。在add()的javadoc中也記錄了這種行爲。 – bratkartoffel

+0

@bratkartoffel是的,我做過了,大部分時間用於執行offer()方法 – hh32

回答

2

docs說,在一個CircularFifoQueue以下有關插入:

如果隊列是滿的,最近最早添加的元素將被丟棄,從而 一個新的元件可以被插入。

當涉及到性能,但是要的是,除了注意從進行在恆定時間addremovepeekpolloffer方法,該數據結構的所有方法以線性時間執行,或者更糟。

+0

如果經常向fulll隊列中添加元素,您能推薦一個性能更好的數據結構嗎? – hh32

+0

你有線程安全要求嗎? –

+0

不,我沒有 – hh32