non riesco a capire che differnza c'e se aggiungo elementi con add e addAll

mostro un esempio visto da un eserciziario:

codice:
public Set<T> covered(T r, Collection<? extends T> coll) {
        if (!contains(r)) throw new IllegalArgumentException();
        Set<T> cov = new HashSet<T>();
        if (r.isCovered(coll)) cov.add(r);
        for (T c : children.get(r))
            cov.addAll(covered(c, coll));   // si poteva usare add?
        return cov;
    }
l'istruzione cov.addAll(covered(c, coll)); // (chiamata ricorsiva)
si poteva usare solo add?

Grazie in anticipo...