在Java中保存最后N个元素的有限大小队列关于Java库的一个简单而快速的问题:是否有一个现成的类实现了Queue具有固定的最大大小-也就是说,它总是允许添加元素,但它将悄悄地删除Head元素,以容纳新添加的元素的空间。当然,手动实现它很简单: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;
}}据我所见,Javastdlib中没有标准的实现,但可能在ApacheCommons中有这样的实现吗?
3 回答
阿晨1998
TA贡献2037条经验 获得超6个赞
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]
更新
慕码人8056858
TA贡献1803条经验 获得超6个赞
import java.util.Queue;import com.google.common.collect.EvictingQueue;Queue<Integer> fifo = EvictingQueue.create(2); fifo.add(1); fifo.add(2); fifo.add(3); System.out.println(fifo); // Observe the result: // [2, 3]
九州编程
TA贡献1785条经验 获得超4个赞
public class LimitedQueue<E> extends LinkedList<E> { private int limit; public LimitedQueue(int limit) { this.limit = limit; } @Override public boolean add(E o) { boolean added = super.add(o); while (added && size() > limit) { super.remove(); } return added; }}
添加回答
举报
0/150
提交
取消