gpt4 book ai didi

java - 入队/出队或提供/轮询

转载 作者:行者123 更新时间:2023-11-29 06:40:17 29 4
gpt4 key购买 nike

这似乎是一个非常基本的问题,但我已经被困了几个小时。

我们什么时候使用 enqueue/dequeue 方法,什么时候使用 offer/poll?!

我想用 void enqueue(int x, int p)int dequeue() 方法创建一个整数 PQ,我该如何声明这样一个队列?

谢谢。

最佳答案

我假设“PQ”的意思是“优先队列”。我从未使用过这样的队列(我对队列的印象是严格的 FIFO 结构),但在阅读文档后,我认为你可以这样做:

首先,您需要创建要存储在队列中的对象的类。假设 int 内容和 int 优先级:

public class MyClass implements Comparable<MyClass> {
private int x, p;

/*
* x: Contents
* p: Priority
*/
public MyClass(int x, int p) {
this.x = x;
this.p = p;
}

@override
public int compareTo(MyClass o) {
return this.p - o.p;
}

public int getX() {
return x;
}
}

现在,创建您的优先级队列。如果我对类文档的理解正确,它将使用 compareTo 方法对您的对象进行排序:

....
PriorityQueue<MyClass> pq = new PriorityQueue<MyClass>();
....
pq.add(new MyClass(x, p));
....

检查:http://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html

Java 队列没有enqueuedequeue 方法;这些操作是使用以下方法完成的:

  • 排队:
    • add(e):插入对象失败抛出异常
    • offer(e):如果插入对象失败返回false
  • 出列:
    • remove():如果队列为空则抛出异常
    • poll():如果队列为空则返回null
  • 查看队列中的第一个对象:
    • element():如果队列为空则抛出异常
    • peek():如果队列为空则返回null

现在,最后:何时使用 offeradd

关于offeradd:嗯,那要看你想怎么处理队列插入失败了:

The add method, which Queue inherits from Collection, inserts an element unless it would violate the queue's capacity restrictions, in which case it throws IllegalStateException. The offer method, which is intended solely for use on bounded queues, differs from add only in that it indicates failure to insert an element by returning false.

(参见:http://docs.oracle.com/javase/tutorial/collections/interfaces/queue.html)

希望对你有帮助

关于java - 入队/出队或提供/轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13210731/

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