【问题标题】:Removing top of PriorityQueue?删除 PriorityQueue 的顶部?
【发布时间】:2011-05-28 03:54:25
【问题描述】:

假设我正在使用 Java.util 中的 PriorityQueue 类。我想从 PriorityQueue pq 中删除最大的数字,我们假设它位于队列的头部。

以下是否有效?

// 1 
int head = pq.peek();
pq.dequeue(head);

// 2
int head = pq.dequeue(pq.peek());

这对非原始人也同样有效吗?

【问题讨论】:

  • 请告诉我们您为什么不想使用poll()
  • 您在哪里找到dequeue 方法? My API doesn't show it ..?

标签: java queue priority-queue


【解决方案1】:

Queue#peekQueue#element返回队列的头值,Queue#pollQueue#remove返回并删除它。

看起来像

int head = pq.poll();

是你想要的。

并且:它适用于非原始值,因为队列将仅存储对象。诀窍是,(我猜)您的队列存储Integer 值,Java 1.5+ 可以自动将结果转换为int 原语(发件箱)。所以它感觉就像队列中存储了int 值。

【讨论】:

  • 感谢投反对票,但是.. 为什么
【解决方案2】:

peek() - 返回但不删除头部值

poll() - 返回并移除 head 值

        PriorityQueue<Integer> pq = new PriorityQueue<Integer>();

        pq.add(2);pq.add(3);

        System.out.println(pq); // [2, 3]
        System.out.println(pq.peek()); // head 2
        System.out.println(pq); // 2 still exists. [2, 3]
        System.out.println(pq.poll()); // 2. remove head (2)
        System.out.println(pq); // [3]

【讨论】:

    猜你喜欢
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 2020-01-23
    • 1970-01-01
    相关资源
    最近更新 更多