gpt4 book ai didi

java - JDK中的先进先出队列

转载 作者:行者123 更新时间:2023-12-01 19:37:59 31 4
gpt4 key购买 nike

我想要一个带有 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 工作的 JDK FIFO 队列或CircularFifoQueue

如果 JDK 没有提供类似的东西,我应该选择哪一个:EvictingQueueCircularFifoQueue ?哪个实现得更好?

(请不要提供 fifo 队列的示例实现,我想使用 lib,最好只使用 JDK)

最佳答案

如果您看到 ArrayBlockingQueue 的 Offer 实现,它有一行,因此值 3 甚至没有附加到 items 数组中。

if (count == items.length)
return false;

所以你可以这样做:

static void append(Queue<Integer> fifo, int i) {
if (!fifo.offer(i)) {
fifo.poll();
fifo.offer(i);
}
}

// in main:
Queue<Integer> fifo3 = new ArrayBlockingQueue<>(2);
append(fifo3, 1);
append(fifo3, 2);
append(fifo3, 3);
System.out.println(fifo3); // prints [2, 3]

关于java - JDK中的先进先出队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56666381/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com