我想知道因为API说remove()
函数返回一个布尔类型,当我删除它时如何获取元素的信息。也就是说,是否可以这样做:
class Node {
int stuff;
}
PriorityQueue <Node> nodes = new PriorityQueue <Node> ();
Node temp = nodes.remove(0);
假设当然,节点PQ中有一堆节点。 temp
节点是否具有被删除节点的信息,或者由于remove()
返回布尔值
答案 0 :(得分:3)
在队列中,您无法按位置remove(int)
移除对象,只能通过引用remove(E)
删除。队列不是为随机访问而设计的。 (唯一的例外可能是LinkedList
,因为它实现了List
和Queue
接口。您的代码无法编译。
答案 1 :(得分:3)
使用poll方法检索头元素
答案 2 :(得分:0)
这不起作用,您最终会遇到编译错误,因为您尝试将基元类型boolean
分配给包含对Node
实例的引用的变量。如果您可以通过索引访问PriorityQueue
中的节点,则可以先在任何索引中保存对象的引用,然后将其删除。
也就是说,简要地看一下PriorityQueue
类的API,看起来你对remove()
的使用也是错误的(它需要一个对象,而不是int
)。
答案 3 :(得分:0)
这是阅读文档的最佳位置。 remove(object)从队列中删除该对象。由于向后兼容性,它不够聪明,不能告诉你队列中没有整数。即您正试图删除对象(Integer) 0
相反,你应该使用不带参数的remove()方法
检索并删除此队列的头部。此方法与poll的不同之处仅在于,如果此队列为空,则抛出异常。
但是,更好的选择可能是使用poll,因为它会执行相同的操作,除非它在队列为空时返回null而不是异常。