我在理解CircularFifoQueue Class的工作原理时遇到了一些麻烦。所以对于我的要求,我需要一个固定大小的FIFO队列(大约6000个元素)。在frist我正在使用ArrayDequeue,但它的表现相当糟糕。然后我读了一下CircularFifoQueue并试了一下。我可以看到性能的提升,但它仍然不快。
我的问题是:如果队列已满并且我添加了一个元素会发生什么?是否复制了整个底层数组?是否有一些偏移,将被设置,例如
head = (head + 1) % size;
如果是后者,那么我猜我的算法表现不佳。
谢谢!
答案 0 :(得分:3)
docs说明了有关CircularFifoQueue
如果队列已满,则最近添加的元素将被丢弃 可以插入新元素。
在性能方面,需要注意的是,除执行的add
,remove
,peek
,poll
和offer
方法外在恒定时间内,此数据结构的所有方法都在线性时间内执行,或者更糟。