我想把一些int推到一个优先级,但我不能!我使用了queue.add()代码,但是这段代码将返回排序队列,请帮助,谢谢!
答案 0 :(得分:2)
为堆栈抽象数据类型明确定义push/pop
操作;我不确定它是否对队列(甚至是优先级队列)有意义。
PriorityQueue
implements
Queue
,仅指定add/remove
。另一方面,Deque
有addFirst/Last
,removeFirst/Last
等。也许其中一个就是您正在寻找的。 p>
以下是使用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)可以添加到队列中。无论什么方法得到下一个元素都应该从堆栈中删除它,如果有任何东西,否则它将获得队列的下一个元素。