Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较列表中的时间间隔(JodaTime)是否重叠_Java_Compare_Jodatime_Intervals - Fatal编程技术网

Java 比较列表中的时间间隔(JodaTime)是否重叠

Java 比较列表中的时间间隔(JodaTime)是否重叠,java,compare,jodatime,intervals,Java,Compare,Jodatime,Intervals,我有一个间隔列表,我需要比较它们的重叠 List<Interval> intervals = new ArrayList<>(); intervals.add(new Interval(dateTime1, dateTime2)); intervals.add(new Interval(dateTime3, dateTime4)); intervals.add(new Interval(dateTime5, dateTime6)); List interval=new

我有一个间隔列表,我需要比较它们的重叠

List<Interval> intervals = new ArrayList<>();
intervals.add(new Interval(dateTime1, dateTime2));
intervals.add(new Interval(dateTime3, dateTime4));
intervals.add(new Interval(dateTime5, dateTime6));
List interval=new ArrayList();
添加(新的间隔(dateTime1,dateTime2));
添加(新的间隔(dateTime3,dateTime4));
添加(新的间隔(dateTime5,dateTime6));
例如。 日期时间1=2014-06-01 日期时间2=2014-07-01

日期时间3=2014-08-01 日期时间4=2014-09-01

日期时间5=2014-08-15 日期时间6=2014-09-15


在这种情况下,第2和第3间隔之间存在重叠。我可以使用Interval.overlaps方法来找到它。我在考虑2个for循环,并通过列表中的每个间隔进行比较。但这个解是O(n*n)。什么是更有效的方法呢?

您应该首先按开始时间对间隔进行升序排序,然后对循环只应用一个,以找出哪些间隔重叠

使用单for循环解决方案时,如果两个相邻间隔重叠或不重叠,则需要比较它们。当然,你必须检查循环的范围条件,要注意的是,考虑每个单循环运行的两个间隔。类似于此(未经测试):

public boolean isOverlapping(列表排序间隔){
对于(int i=0,n=sortedIntervals.size();i
谢谢。这是按开始时间对间隔进行排序的好方法-
public boolean isOverlapping(List<Interval> sortedIntervals) {
  for (int i = 0, n = sortedIntervals.size(); i < n - 1; i++) {
    if (sortedIntervals.get(i).overlaps(sortedIntervals.get(i + 1))) {
      return true; // your evaluation for overlap case
    }
  }

  return false;
}