关于 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 stdlibs 中没有标准实现,但 Apache Commons 或类似的东西中可能有一个标准实现?
Apache Commons Collections 4 有一个循环FifoQueue https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/queue/CircularFifoQueue.html这就是您正在寻找的。引用javadoc:
CircularFifoQueue 是一个具有固定大小的先进先出队列,如果已满,则会替换其最旧的元素。
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 commons collections (3.x),则可以使用循环Fifo缓冲区 https://commons.apache.org/proper/commons-collections/javadocs/api-3.2.2/org/apache/commons/collections/buffer/CircularFifoBuffer.html没有泛型的话,这基本上是一样的。
Update:在支持泛型的公共集合版本 4 发布后更新了答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)