入队/出队或提供/投票

时间:2012-11-03 15:45:27

标签: java queue

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

我们何时使用方法入队/出队&我们什么时候使用offer / poll?!

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

感谢。

2 个答案:

答案 0 :(得分:6)

我假设“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:嗯,这取决于您希望如何处理队列中插入的失败:

  

添加方法,队列继承自 Collection ,插入一个元素,除非它违反了队列的容量限制,在这种情况下它抛出 IllegalStateException 商品方法仅用于有界队列,与 add 的区别仅在于它表示无法通过返回来插入元素

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

希望这有助于你

答案 1 :(得分:1)

排队: add(e):如果无法插入对象,则引发异常 offer(e):如果无法插入对象,则返回false 出队: remove():如果队列为空,则引发异常 poll():如果队列为空,则返回null 看一下队列中的第一个对象: element():如果队列为空,则引发异常 peek():如果队列为空,则返回null 现在,最后:什么时候使用offer和添加?

关于报价和添加:好吧,这取决于您要如何处理插入队列中的失败:

Queue继承自Collection的add方法插入一个元素,除非它违反队列的容量限制,在这种情况下,它将抛出IllegalStateException。 offer方法只适用于有界队列,它与add的不同之处仅在于它表示无法通过返回false插入元素。

(请参阅:http://docs.oracle.com/javase/tutorial/collections/interfaces/queue.html