从Priority Queue Java中删除

时间:2011-09-21 11:19:03

标签: java priority-queue

我想知道因为API说remove()函数返回一个布尔类型,当我删除它时如何获取元素的信息。也就是说,是否可以这样做:

class Node {
  int stuff;
}

PriorityQueue <Node> nodes = new PriorityQueue <Node> ();

Node temp = nodes.remove(0);

假设当然,节点PQ中有一堆节点。 temp节点是否具有被删除节点的信息,或者由于remove()返回布尔值

而无效

4 个答案:

答案 0 :(得分:3)

在队列中,您无法按位置remove(int)移除对象,只能通过引用remove(E)删除。队列不是为随机访问而设计的。 (唯一的例外可能是LinkedList,因为它实现了ListQueue接口。您的代码无法编译。

答案 1 :(得分:3)

使用poll方法检索头元素

答案 2 :(得分:0)

这不起作用,您最终会遇到编译错误,因为您尝试将基元类型boolean分配给包含对Node实例的引用的变量。如果您可以通过索引访问PriorityQueue中的节点,则可以先在任何索引中保存对象的引用,然后将其删除。

也就是说,简要地看一下PriorityQueue类的API,看起来你对remove()的使用也是错误的(它需要一个对象,而不是int)。

答案 3 :(得分:0)

这是阅读文档的最佳位置。 remove(object)从队列中删除该对象。由于向后兼容性,它不够聪明,不能告诉你队列中没有整数。即您正试图删除对象(Integer) 0

相反,你应该使用不带参数的remove()方法

  

检索并删除此队列的头部。此方法与poll的不同之处仅在于,如果此队列为空,则抛出异常。

但是,更好的选择可能是使用poll,因为它会执行相同的操作,除非它在队列为空时返回null而不是异常。