java实现 多个日期区间 区分出不同区间的重叠区间和不重叠区间并输出
时间: 2024-09-18 13:07:56 浏览: 52
最大重叠区间个数–java实现
在 Java 中,你可以使用 `java.time` 包下的 `LocalDate` 和一些集合数据结构来处理多个日期区间以及它们之间的重叠和非重叠情况。这里可以使用 `LocalDate` 对象表示日期,`Interval` 或自定义类来表示日期区间,然后通过比较操作找出重叠部分。
首先,定义一个简单的 `Interval` 类:
```java
import java.time.LocalDate;
import java.util.List;
class Interval {
private LocalDate start;
private LocalDate end;
public Interval(LocalDate start, LocalDate end) {
this.start = start;
this.end = end;
}
// getter and setter
public boolean contains(LocalDate date) {
return date.isAfter(start) && date.isBefore(end);
}
}
```
接下来,我们可以创建一个方法来检查区间是否重叠,并找出所有重叠和非重叠的区间:
```java
import java.util.ArrayList;
import java.util.List;
public class DateRangeManager {
public static void manageIntervals(List<Interval> intervals) {
List<Interval> overlappingIntervals = new ArrayList<>();
for (int i = 0; i < intervals.size(); i++) {
Interval intervalA = intervals.get(i);
for (int j = i + 1; j < intervals.size(); j++) {
Interval intervalB = intervals.get(j);
if (intervalA.overlaps(intervalB)) {
overlappingIntervals.add(intervalA);
overlappingIntervals.add(intervalB); // 添加到结果列表
} else {
System.out.println("Non-overlapping interval: " + intervalA + ", " + intervalB);
}
}
}
// 输出重叠区间
System.out.println("Overlapping intervals:");
for (Interval interval : overlappingIntervals) {
System.out.println(interval);
}
}
private static boolean overlaps(Interval a, Interval b) {
return !a.end.isBefore(b.start) && !b.end.isBefore(a.start);
}
}
```
在这个例子中,`manageIntervals` 方法会遍历所有的区间对,如果发现两个区间有交集,就将它们添加到 `overlappingIntervals` 列表中。最后打印出所有的非重叠区间和重叠区间。
阅读全文