【发布时间】:2019-11-02 02:49:11
【问题描述】:
我想要一个 FIFO 的有限队列。因此,如果队列的最大大小超过,则删除第一个元素。
带有 google 集合的 FIFO 队列:
Queue<Integer> fifo = EvictingQueue.create(2);
fifo.add(1);
fifo.add(2);
fifo.add(3);
System.out.println(fifo); // prints [2, 3]
带有 apache 集合的 FIFO 队列:
// FIFO-queue works with apache collections
Queue<Integer> fifo2 = new CircularFifoQueue<>(2);
fifo2.add(1);
fifo2.add(2);
fifo2.add(3);
System.out.println(fifo2); // prints [2, 3]
带有 JDK 集合的 FIFO 队列:
Queue<Integer> fifo3 = new ArrayBlockingQueue<>(2);
fifo3.offer(1);
fifo3.offer(2);
fifo3.offer(3);
System.out.println(fifo3); // prints [1, 2]
ArrayBlockingQueue 不能作为 FIFO 工作,它只会在队列已满时停止插入元素。
是否有类似EvictingQueue 或CircularFifoQueue 的JDK FIFO 队列?
如果 JDK 不提供类似的功能,我应该选择哪一个:EvictingQueue 或 CircularFifoQueue?
哪个实施得更好?
(请不要提供fifo队列的示例实现,我要使用lib,最好只有JDK)
【问题讨论】:
-
ArrayBlockingQueue<>(2, true)呢?这将是先进先出。 -
@anatoli 不,不起作用。它是
prints [1, 2]而不是[2, 3]。
标签: java collections