两个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    

解决方案 »

  1.   

    汗...例如: list1记录1中出现了2009.06.01  到  2009.06.05 的时间段
          在list2记录1中有2009.06.03 到  2009.06.08 时间段
    则求:list1的时间段除去在list2中出现过的时间段,结果是:2009.06.01到2009.06.03list1与list2的差集
    即:求list1中有,而list2中没有的数据
      

  2.   

    首先,对两个list进行排序,接着遍历list1,同时遍历list2,用两重循环,对list1的每一个元素与list2中的元素比较,如果小于则进入下一轮;如果大于等于就用list2中的那个元素取代list1中的,直到遍历完。
      

  3.   

    首先,对两个list进行排序,接着遍历list1,同时遍历list2,用两重循环,对list1的每一个元素与list2中的元素比较,如果小于则进入下一轮;如果大于等于就用list2中的那个元素取代list1中的,直到遍历完。
      

  4.   

    前提,两个list都是有序的按 startTime 升序排,若startTime 相等再按endTime排
      

  5.   

    那就直接从这步开始:遍历list1,同时遍历list2,用两重循环,对list1的每一个元素与list2中的元素比较,如果小于则进入下一轮;如果大于等于就用list2中的那个元素取代list1中的,直到遍历完。
      

  6.   

    把list1和list2中的元素都封闭成Date类型,然后调用Date中的compareTo()方法,根据返回值判断大小。
      

  7.   

    首先在List2中的startTime中找比list1的第一条记录中的startTime小的时间,如果找到,就用List2中的这条记录的endTime与List1中的endTime相比,如果比List1中的大就删掉这记录,如果比List1中的endTime小,就把List2中的endTime作为startTime,List1中的endTime作为endTime存入List中,如果没有找到,就继续从List2中的startTime中找比list1的第一条记录中的startTime大,但比endTime小的时间,以此类推,接着从从List2中的startTime中找比list1的第一条记录中的endTime大,但比第二条记录的startTime小的时间......
      

  8.   

    如果删掉一条记录后就,就从比它的下条记录的startTime小的时间开始找
      

  9.   


    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));
    }
    }
    }}