代码之家  ›  专栏  ›  技术社区  ›  Dilshad Abduwali

在Java中,检查大于和小于的最有效方法是什么?

  •  0
  • Dilshad Abduwali  · 技术社区  · 12 年前

    最有效的检查方法是什么:

    A is scheduled for 4 - 7;
    B is scheduled for 5 - 8;
    

    上述时间表重叠。在以下示例中,如果A和B重叠或不重叠,我如何在Java中进行检查:

    对于A

    int start = 4;
    int end = 7;
    

    对于B

    int start = 5;
    int end = 8;
    

    请告知检查是否重叠的最有效方法。 非常感谢。

    3 回复  |  直到 12 年前
        1
  •  2
  •   Konstantin Yovkov    12 年前

    最有效的方法是使用 interval tree .

        2
  •  1
  •   Mouli    12 年前

    下面的逻辑应该可以用来测试重叠。这是从结束日期向后进行的负离散检查。其他检查方法是获取引用起始时间,如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;
    }
    
        3
  •  0
  •   Pan Long    12 年前

    如果你只处理一些数据,那么即使只是比较开始和结束也足够快了。然而,如果你正在处理一个大数据,你可能想使用一些其他的数据结构,比如这里的增强树,以获得一些效率。