我在MultiIntervalSet中设计了两个子类
一个为Nper(命名没有实际意义),用来存储label以及一个time类的链表,用以存储对一个目标的多次排班或调度
class Nper<L>{
private L label;
private LinkedList<time> timelist = new LinkedList<time>();
public Nper(L Nlabel, long Nstart, long Nend) {
this.label = Nlabel;
time Ntime = new time(Nstart, Nend);
timelist.add(Ntime);
}
}
第二个子类为time,用以储存单次调度的起始时间与终止时间
class time{
private long start;
private long end;
public time(long Nstart, long Nend) {
this.start = Nstart;
this.end = Nend;
}
}
说回MultiIntervalSet
protected LinkedList<Nper<L>> multilabels = new LinkedList<Nper<L>>();
主要的数据结构为<Nper>的链表multilabels,每一个Nper中都会存储一个L label以及对其的调度表timelist。
此种设计的好处就是,当需要取出对某个进程的调度信息(或某门课程的排课信息)时,只需要找到一次相应的Nper就可以调出他的所有时间调度。而对timelist插入时间时会进行排序(time的insert函数),timelist中根据index的大小顺序存储调度发生的时间。当所需调用时会更加的方便且清晰