我想将一些 int 推送到优先队列,但我不能!我使用了 queue.add() 代码,但此代码将返回排序后的队列,请帮助,谢谢!
3 回答
push/pop
为堆栈抽象数据类型明确定义了一个操作;我不确定队列(甚至优先级队列)是否有意义。
PriorityQueue
implements
Queue
, 它只指定add/remove
. 另一方面, a Deque
has addFirst/Last
,removeFirst/Last
等。也许其中一个就是您要寻找的。
一个例子
PriorityQueue
这是一个使用of的示例,使用比较长度String
的自定义Comparator
。
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"
正如预期的那样,将给出队列PriorityQueue
中最短的. 同样如指定的那样,关系被任意打破。String
remove
相关问题
上PriorityQueue
开Comparator
和Comparable
我想将一些 int 推送到优先队列
“推送”是堆栈操作,而不是队列操作。
但我不能!我使用了 queue.add() 代码,但此代码将返回已排序的队列
不,不会的。PriorityQueue 仅出于移除队列头部的目的进行排序。
你的问题没有多大意义。如果要推送,请使用堆栈。如果您不想要 PriorityQueue 的功能,请不要使用它。
你的实际问题到底是什么?
优先级队列的全部意义在于它首先返回最小的条目(或者更确切地说,出现在排序列表中的第一个元素)。如果这不是您想要的,您可能不想要一个直接的 PriorityQueue。
您可以做的是创建一个类,该类具有一个 PriorityQueue 用于通常的东西,以及一个用于“紧急情况”的堆栈。有一个将东西添加到堆栈的 push(T) 方法,以及一个添加到队列的 add(T) 方法。无论哪种方法获取下一个元素,如果那里有任何东西,都应该将其从堆栈中删除,否则它会获取队列的下一个元素。