import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

/**
 * La misma cuenta por composición: tiene un Set y le delega. No depende de
 * cómo HashSet implemente addAll por dentro.
 */
public class DelegatingCountingSet {
    private final Set<String> items = new HashSet<>();
    private int added = 0;

    public boolean add(String s) {
        added++;
        return items.add(s);
    }

    public boolean addAll(Collection<String> c) {
        added += c.size();
        return items.addAll(c);      // items.add no es nuestro add: no cuenta doble
    }

    public boolean contains(String s) {
        return items.contains(s);
    }

    public int size() {
        return items.size();
    }

    public int added() {
        return added;
    }
}
