public boolean containsAll(Collection<?> c) {
        if (reverse) {
            if (c instanceof ReverseSet) {
                if (((ReverseSet<E>) c).reverse) {
                    return ((ReverseSet<E>) c).set.containsAll(set);
                } else {
                    return Collections.disjoint(set, ((ReverseSet<E>) c).set);
                }
            } else {
                return Collections.disjoint(set, c);
            }
        } else {
            if (c instanceof ReverseSet) {
                if (((ReverseSet<E>) c).reverse) {
                    return false;
                } else {
                    return set.containsAll(((ReverseSet<E>) c).set);
                }
            } else {
                return set.containsAll(c);
            }
        }
    }