Excluir intervalos superpuestos

Tengo dos listas de intervalos. Me gustaría eliminar todos los tiempos de la lista1 que ya existen en la lista2. Ejemplo: List1:

[(0,10), (15,20)]

Lista2:

[(2,3), (5,6)]

Salida:

[(0,2), (3,5), (6,10), (15,20)]

¿Alguna pista?

Intenté eliminar un intervalo en el momento pero parece que necesito un enfoque diferente:

public List<Interval> removeOneTime(Interval interval, Interval remove){
    List<Interval> removed = new LinkedList<Interval>();
    Interval overlap = interval.getOverlap(remove);
    if(overlap.getLength() > 0){
        List<Interval> rms = interval.remove(overlap);
        removed.addAll(rms);
    }
    return removed;
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta