Java 中循环缓冲区的最佳实现是什么?我已经阅读了其他问题,但它们已经过时了,并且参考了CircularFifoBuffer,这在 Apache Commons Collections 4 中不存在。在 Java 8 中是否有一种新的、广泛接受的方法来使用循环缓冲区?
java.util.ArrayDeque
。ArrayDeque
类仍然有点被忽视。
不过,您需要更精确地定义 circular buffer 。经典定义表明有界缓冲区的容量永远不会改变。我怀疑这是否是最佳的,但有几个目的。这就是为什么我的第一个建议是内置
ArrayDeque
类。
来自文档:
接口的可调整大小数组实现。数组双端队列 没有容量限制;他们根据需要成长以支持 用法。 …当用作类时,该类可能比Deque
更快 堆栈,用作队列时比Stack
更快。LinkedList
自:
1.6
文档没有直接说明它是循环的,但它确实是循环的(我刚刚检查了源代码,100%确定)。既然他们建议将其用作队列,那么不将其设为循环就没有意义了。
如果由于某种原因我从这里看不到你需要一个循环缓冲区来拒绝超出某个预定义最大元素计数的元素,我无法想象编写一个实现该行为的
ArrayDeque
的瘦子类会很困难。
链接:维基百科上的循环缓冲区。引用:
...循环缓冲区...是一种使用单个、 固定大小的缓冲区...