//作者水平有限,难免有不足之处,望批评改正
/*
优先队列:普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。
在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。
*/
import java.util.Comparator;
import java.util.Iterator;
import java.util.PriorityQueue;
public class queue {
private static final boolean String = false;
public static void main(String[] args){
//如果不提供Comparator的话,优先队列中元素默认按自然顺序排列,也就是数字默认是小的在队列头,字符串则按字典序排列。
//如果不知道什么事Comparator,笔者的另一篇文章有详细的解释以及与Comparable的比较
//在这里我们提供一个比较器
Comparator<student> cp=new Comparator<student>(){
public int compare(student s1, student s2){
int num1=s1.grade;
int num2=s2.grade;
if(num1 > num2)
{
return 1;
}
else if(num1<num2)
{
return -1;
}
else
{
return 0;
}
}
};
//创建优先队列,存放整数类型的数据,默认长度11,这是的长度为5,比较器为cp
PriorityQueue<student> pQ=new PriorityQueue<student>(5,cp);
//这俩种方式都可以添加向优先队列中添加元素
student s1=new student("张三",100);
student s2=new student("李四",98);
student s3=new student("王五",99);
student s4=new student("赵六",95);
//这俩种添加方式的效果是一样的
pQ.add(s1);
pQ.offer(s2);
pQ.add(s3);
pQ.add(s4);
//迭代器
Iterator<student> it=pQ.iterator();
System.out.println("优先队列中的个数:"+pQ.size());
while(it.hasNext()){
System.out.print(it.next().name+" ");
}
pQ.poll();//删除分数值最小的(可以理解为优先级最大的)的
System.out.println("\n优先队列中的个数:"+pQ.size());
Iterator<student> it2=pQ.iterator();
while(it2.hasNext()){
System.out.print(it2.next().name+" ");
}
pQ.poll();//删除分数值最小的(可以理解为优先级最大的)的
System.out.println("\n优先队列中的个数:"+pQ.size());
Iterator<student> it3=pQ.iterator();
while(it3.hasNext()){
System.out.print(it3.next().name+" ");
}
}
}