检查这个的最有效方法是什么:
A is scheduled for 4 - 7;
B is scheduled for 5 - 8;
上述时间表重叠。在以下示例中,如果 A 和 B 重叠,我如何检查 Java:
为一个
int start = 4;
int end = 7;
对于乙
int start = 5;
int end = 8;
请告知检查是否重叠的最有效方法。谢谢你
最有效的方法是使用区间树。
下面的逻辑应该可以测试重叠。这是从结束日期向后工作的负离散检查。其他检查方法是获取参考开始时间,例如 data.getTime()
private boolean testOverlap(Date sched1Start, Date sched1End, Date sched2Start, Date sched2End) {
//Validate ranges to check if End dates are after start dates
//Overlaps if both schedules end at same time
if(sched1End.equals(sched2End)) return true;
//Get which one ends last
if(sched1End.before(sched2End)) {
//Working backwards sched2 starts after sched1 Ends so they dont overlap
if(sched2Start.after(sched1End) || sched2Start.equals(sched1End)) {
//Doesnt overlap
return false;
}
} else {
//Sched1 ends last
if(sched1Start.after(sched2End) || sched1Start.equals(sched2End)) {
//Doesnt overlap
return false;
}
}
return true;
}
如果您只处理一些数据,那么即使只是比较开始和结束也足够快。但是,如果您正在处理大数据,您可能希望在这里使用一些其他数据结构,例如增强树来获得一些效率。