PriorityQueue(优先队列)
PriorityQueue(优先队列)
实际上是一个堆(不指定Comparator时默认为最小堆)
队列既可以根据元素的自然顺序来排序,也可以根据 Comparator来设置排序规则。
队列的头是按指定排序方式的最小元素。如果多个元素都是最小值,则头是其中一个元素。
新建对象的时候可以指定一个初始容量,其容量会自动增加。
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;
public class MyPriotityQueue {
public static void main(String args[]) {
Scanner in=new Scanner(System.in);
myProcess process=new myProcess();
PriorityQueue<Process> priQue=new PriorityQueue<Process>(5,process);
System.out.println("请依次输入进程被执行时所需要的时间,0表示结束:");
boolean flag=true;
int time;
for(int process_count=1;flag;process_count++){
System.out.print("进程" + process_count + "执行所需的时间:");
time=in.nextInt();
if(time>0){
priQue.add(new Process(process_count,time));
}else {
flag=false;
}
}
System.out.println("\n进程被调度的顺序是:");
while (priQue.size()>0){
Process tj;
tj = priQue.poll();
System.out.println("进程" + tj.getProcessID() + "执行所需的时间:"
+ tj.getTime());
}
}
}
class Process{
private int processID;
private int time;
public Process(int processID, int time) {
this.processID = processID;
this.time = time;
}
public int getProcessID() {
return processID;
}
public void setProcessID(int processID) {
this.processID = processID;
}
public int getTime() {
return time;
}
public void setTime(int time) {
this.time = time;
}
}
class myProcess implements Comparator<Process>{
@Override
public int compare(Process p1, Process p2) {
if(p1.getTime()>p2.getTime())
return 1;
if(p1.getTime()<p2.getTime())
return -1;
return 0;
}
}