两个ArrayList<Test> list1,list2;
都存的是Test对象求list1与list2时间段的差集
即求在list1除去list2出现过的时间段的List
若list2中有时间段包含了list1中的时间段则除去list1的该条记录public class Test{
private Date startTime ;
private Date endTime ;
}例如:list1中的数据为 startTime endTime
2009.06.01 2009.06.05
2009.06.11 2009.06.13
2009.06.20 2009.06.30 list2中的数据为 startTime endTime
2009.06.03 2009.06.08
2009.06.10 2009.06.15
2009.06.22 2009.06.25求得结果为: startTime endTime
2009.06.01 2009.06.03
2009.06.20 2009.06.22
2009.06.25 2009.06.30
都存的是Test对象求list1与list2时间段的差集
即求在list1除去list2出现过的时间段的List
若list2中有时间段包含了list1中的时间段则除去list1的该条记录public class Test{
private Date startTime ;
private Date endTime ;
}例如:list1中的数据为 startTime endTime
2009.06.01 2009.06.05
2009.06.11 2009.06.13
2009.06.20 2009.06.30 list2中的数据为 startTime endTime
2009.06.03 2009.06.08
2009.06.10 2009.06.15
2009.06.22 2009.06.25求得结果为: startTime endTime
2009.06.01 2009.06.03
2009.06.20 2009.06.22
2009.06.25 2009.06.30
在list2记录1中有2009.06.03 到 2009.06.08 时间段
则求:list1的时间段除去在list2中出现过的时间段,结果是:2009.06.01到2009.06.03list1与list2的差集
即:求list1中有,而list2中没有的数据
import java.util.ArrayList;class TimeDate {
private int startTime;
private int endTime; public TimeDate(int startTime, int endTime) {
this.startTime = startTime;
this.endTime = endTime;
} public int getStartTime() {
return startTime;
} public void setStartTime(int startTime) {
this.startTime = startTime;
} public int getEndTime() {
return endTime;
} public void setEndTime(int endTime) {
this.endTime = endTime;
} public static int Compare(int former, int latter) {
if (former < latter) {
return -1;
} else if (former == latter) {
return 0;
} else {
return 1;
}
} @Override
public String toString() {
String s = this.startTime + " to " + this.endTime;
return s;
}}public class TimeMinus { public static boolean calculateTimeMinus(TimeDate former, TimeDate latter) {
boolean latterFlag = false;
if (TimeDate.Compare(former.getStartTime(), latter.getStartTime()) == -1) {
if (TimeDate.Compare(former.getEndTime(), latter.getStartTime()) != 1) {
System.out.println(former.getStartTime() + " to "
+ former.getEndTime());
} else {
if (TimeDate.Compare(former.getEndTime(), latter.getEndTime()) != 1) {
System.out.println(former.getStartTime() + " to "
+ latter.getStartTime());
} else {
System.out.println(former.getStartTime() + " to "
+ latter.getStartTime());
System.out.println(latter.getEndTime() + " to "
+ former.getEndTime());
}
}
} else if (TimeDate.Compare(former.getStartTime(), latter
.getStartTime()) == 0) {
if (TimeDate.Compare(former.getEndTime(), latter.getEndTime()) != 1) {
// do nothing
} else {
System.out.println(latter.getEndTime() + " to "
+ former.getEndTime());
}
} else {
if (TimeDate.Compare(former.getStartTime(), latter.getEndTime()) != -1) {
latterFlag = true;
} else {
if (TimeDate.Compare(former.getEndTime(), latter.getEndTime()) != 1) {
// do nothing
} else {
System.out.println(latter.getEndTime() + " to "
+ former.getEndTime());
}
}
}
return latterFlag;
} public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<TimeDate> TimeDateArray1 = new ArrayList<TimeDate>();
TimeDateArray1.add(new TimeDate(2, 5));
TimeDateArray1.add(new TimeDate(7, 10));
TimeDateArray1.add(new TimeDate(12, 14));
ArrayList<TimeDate> TimeDateArray2 = new ArrayList<TimeDate>();
TimeDateArray2.add(new TimeDate(1, 3));
TimeDateArray2.add(new TimeDate(8, 9)); int i = 0, j = 0;
int m = TimeDateArray1.size();
int n = TimeDateArray2.size();
boolean result;
while (true) {
result = TimeMinus.calculateTimeMinus(TimeDateArray1.get(i),
TimeDateArray2.get(j));
if (result) {
if (j + 1 < n) {
j++;
} else {
break;
}
} else {
if (i + 1 < m) {
i++;
} else {
break;
}
}
} if (i < m) {
for (; i < m; i++) {
System.out.println(TimeDateArray1.get(i));
}
}
}}