模拟处理器进程的实体类
import java.io.Serializable;
public class ProcessInfo implements Serializable {
private int name;//进程标识符
private int status;//进程状态
private int pri;//进程优先数
private int time;//剩余优先时间
public ProcessInfo(int name, int status, int pri, int time) {
this.name = name;
this.status = status;
this.pri = pri;
this.time = time;
}
public int getName() {
return name;
}
public void setName(int name) {
this.name = name;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public int getPri() {
return pri;
}
public void setPri(int pri) {
this.pri = pri;
}
public int getTime() {
return time;
}
public void setTime(int time) {
this.time = time;
}
public String toString() {
String mark, poke;
mark = Change.changeName(name);
poke = Change.changeStatus(status);
return "进程:" + mark + ",状态:" + poke + ",优先级:" + pri + ",剩余时间:" + time;
}
}
这个进程有四个参数,如果对单个参数进行排序只需要使用简单的排序算法即可。但是如果比较两个及以上个参数的值的时候,即A参数相等时,比较B参数,如果还使用排序算法就会变得复杂,尤其是在list中比较就更加困难。这个时候可以使用Java的比较容器。
比较容器类
例:对优先级排序,如果优先级相同,按照进程剩余时间顺序
import java.util.Comparator;
public class PriSort implements Comparator<ProcessInfo> {
@Override
public int compare(ProcessInfo p1, ProcessInfo p2) {//对象参数
if (p1.getPri() < p2.getPri()) {//优先级从大到小
return 1;
} else if (p1.getPri() == p2.getPri()) {
if (p1.getTime() > p2.getTime()) //剩余时间从小到大
return 1;
else return -1;
} else return -1;
}
}
熟悉Java容器的上面代码应该不难,本文只做介绍,深入了解可查看Java容器类相关内容。
用法测试及结果
PriSort priSort = new PriSort();//创建比较器对象
Collections.sort(list, priSort);//调用排序方法
执行结果可以看到优先级按照从大到小排序,优先级相同时按照剩余时间从小到大进行排序。
本文介绍了一个用于模拟处理器进程的Java实体类,并展示了如何通过自定义比较器实现对进程优先级和剩余时间的复合排序。
2666

被折叠的 条评论
为什么被折叠?



