import java.util.*;
class Priority{
public static void main(String args[]){
PriorityQueue<String> queue=new PriorityQueue<String>();
queue.add("Amit");
queue.add("Vijay");
queue.add("Karan");
queue.add("Jai");
queue.add("Rahul");
System.out.println("head:"+queue.element());
System.out.println("head:"+queue.peek());
System.out.println("iterating the queue elements:");
Iterator itr=queue.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
queue.remove();
queue.poll();
System.out.println("after removing two elements:");
Iterator itr2=queue.iterator();
while(itr2.hasNext()){
System.out.println(itr2.next());
}
}
}
Output:head:Amit
head:Amit
iterating the queue elements:
Amit
Jai
Karan
Vijay
Rahul
after removing two elements:
Karan
Rahul
Vijay
您好我正在尝试学习java中的集合下的优先级队列(如上所示)。现在我真的很困惑,因为输出。我无法理解输出是如何产生的(如上所示)。
iterating the queue elements:
Amit
Jai
Karan
Vijay
Rahul
在rahul之前vijay是怎么来的?如果它按字母顺序排列rahul必须在vijay之前出现我猜。
所以任何人都可以解释在程序和方法元素()中发生的事情是什么?我找不到那种方法。
答案 0 :(得分:2)
PriorityQueue
不按排序顺序存储元素,但它允许您按排序顺序从中获取元素。它只是确保头部的元素是按照它使用的排序的最小元素。
因此,如果您存储多个号码 - 2, 1, 4, 3, 6, 8
,则会确保1
是您删除的下一个元素。然后,当您移除1
时,它会将2
移至头部。它并不关心其余元素的排序。
答案 1 :(得分:0)
大多数情况下,使用heap datastructure实现优先级队列。堆是保证
的树如果A是B的父亲,那么A&lt;乙
它不保证任何其他订购。在常量时间内提供最小元素,在日志时间中添加元素以及在日志时间中删除密钥就足够了。
只是迭代器itr
使用pre-order transversal遍历堆。
Traverse(node)
visit(node)
Traverse(node.left())
Traverse(node.right())
这解释了你的结果。
注意:在java中<
是通过实施Comparable<T>
答案 2 :(得分:0)