关于 Java 库的一个非常简单和快速的问题:是否有一个现成的类实现具有固定最大大小的 Queue
- 即它总是允许添加元素,但它会默默地删除头元素为新添加的元素提供空间。
当然,手动实现也很简单:
import java.util.LinkedList;
public class LimitedQueue<E> extends LinkedList<E> {
private int limit;
public LimitedQueue(int limit) {
this.limit = limit;
}
@Override
public boolean add(E o) {
super.add(o);
while (size() > limit) { super.remove(); }
return true;
}
}
据我所知,Java 标准库中没有标准实现,但可能在 Apache Commons 或类似的东西中有一个?
最佳答案
Apache commons collections 4 有一个 CircularFifoQueue<>这就是你要找的。引用 javadoc:
CircularFifoQueue is a first-in first-out queue with a fixed size that replaces its oldest element if full.
import java.util.Queue;
import org.apache.commons.collections4.queue.CircularFifoQueue;
Queue<Integer> fifo = new CircularFifoQueue<Integer>(2);
fifo.add(1);
fifo.add(2);
fifo.add(3);
System.out.println(fifo);
// Observe the result:
// [2, 3]
如果您使用的是旧版本的 Apache 公共(public)集合 (3.x),您可以使用 CircularFifoBuffer没有泛型,这基本上是一样的。
更新:在支持泛型的公共(public)集合版本 4 发布后更新了答案。
关于collections - Java 中保存最后 N 个元素的大小受限队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5498865/