推进优先级

时间:2010-06-20 09:51:21

标签: java collections queue priority-queue

我想把一些int推到一个优先级,但我不能!我使用了queue.add()代码,但是这段代码将返回排序队列,请帮助,谢谢!

3 个答案:

答案 0 :(得分:2)

为堆栈抽象数据类型明确定义push/pop操作;我不确定它是否对队列(甚至是优先级队列)有意义。

PriorityQueue implements Queue,仅指定add/remove。另一方面,DequeaddFirst/LastremoveFirst/Last等。也许其中一个就是您正在寻找的。


一个例子

以下是使用PriorityQueue String Queue<String> queue = new PriorityQueue<String>( 100, new Comparator<String>() { @Override public int compare(String s1, String s2) { return Integer.valueOf(s1.length()).compareTo(s2.length()); } } ); queue.add("Sally"); queue.add("Amy"); queue.add("Alice"); System.out.println(queue); // "[Amy, Sally, Alice]" System.out.println(queue.remove()); // "Amy" System.out.println(queue.remove()); // "Alice" queue.add("Tina"); System.out.println(queue.remove()); // "Tina" 的示例,使用比较长度的自定义Comparator

PriorityQueue

正如预期的那样,String将在remove上的队列中提供最短的PriorityQueue。同样如规定,关系也是任意的。

相关问题

Comparator

Comparable和{{1}}

答案 1 :(得分:0)

  

我想把一些int推到一个   的PriorityQueue

'Push'是一个堆栈操作,而不是队列操作。

  

但我不能!我用过   queue.add()代码但是这段代码会   返回已排序的队列

不,不会。 PriorityQueue仅用于删除队列头部的目的。

你的问题没有多大意义。如果要推,请使用堆栈。如果您不想使用PriorityQueue,请不要使用它。

您的实际问题究竟是什么?

答案 2 :(得分:0)

优先级队列的重点是它首先返回最小的条目(或者更确切地说,是第一个出现在排序列表中的元素)。如果这不是您想要的,您可能不需要直接的PriorityQueue。

你可以做的是创建一个类,它具有通常的东西的PriorityQueue和“紧急情况”的堆栈。有一个push(T)方法可以向堆栈添加内容,还有一个add(T)可以添加到队列中。无论什么方法得到下一个元素都应该从堆栈中删除它,如果有任何东西,否则它将获得队列的下一个元素。