code: public static <S, A extends S, B extends S> boolean disjoint(Collection<A> c1, Collection<B> c2) {
  	if(c1.size() > c2.size()) return DSUtil.<S,B,A>disjoint(c2, c1);
  	for(A a : c1) {
  	    if(c2.contains(a)) {
  		return false;
  	    }
  	}
  	return true;
      }
docs: Checks whether two collections are disjoint.  The two
  collections must contain elements with a common superclass
  <code>S</code>.  The worst-case complexity is proportional to
  the product of the lengths of the two collections.  The
  implementation checks that none of the elements of the
  smallest collection is present in the second one.  If
  membership testing is O(1), the complexity of the disjointness
  test is linear in the length of the smallest of the two
  collections.