创建保留FIFO行为的Java PriorityBlockingQueue,可以通过自定义比较器实现。以下是一个完整的示例代码:
import java.util.Comparator;
import java.util.concurrent.PriorityBlockingQueue;
public class Main {
public static void main(String[] args) {
// 创建一个具有自定义比较器的PriorityBlockingQueue
PriorityBlockingQueue<String> queue = new PriorityBlockingQueue<>(10, new FIFOComparator());
// 向队列中添加元素
queue.add("A");
queue.add("B");
queue.add("C");
// 从队列中取出元素
System.out.println(queue.poll()); // 输出:A
System.out.println(queue.poll()); // 输出:B
System.out.println(queue.poll()); // 输出:C
}
// 自定义比较器,实现FIFO行为
static class FIFOComparator implements Comparator<String> {
private int counter = 0;
@Override
public int compare(String o1, String o2) {
// 比较器的compare方法会在队列中的元素进行排序时被调用
// 为了保证FIFO行为,我们可以在比较时返回一个唯一的递增值
return Integer.compare(counter++, 0);
}
}
}
在这个示例中,我们创建了一个具有自定义比较器的PriorityBlockingQueue,并向队列中添加了三个元素。然后,我们从队列中取出这些元素,并按照它们被添加到队列中的顺序输出。
这个示例中的自定义比较器实现了FIFO行为,因为它在比较时返回了一个递增的唯一值。这样,队列中的元素就会按照它们被添加到队列中的顺序进行排序。
领取专属 10元无门槛券
手把手带您无忧上云