を拡張するよりもHashSet、セットを保持してその動作を変更するラッパー クラスを定義する方がよいでしょう (Effective Java #16)。
import java.util.AbstractSet;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class FailFastSet<T> extends AbstractSet<T> {
    private final Set<T> backer;
    public FailFastSet() {
        this(new HashSet<T>());
    }
    public FailFastSet(Set<T> set) {
        backer = set;
    }
    @Override
    public boolean add(T e) {
        if (backer.contains(e))
            throw new IllegalArgumentException(
                "Cannot add "+e+" - equivalent object already exists.");
        return backer.add(e);
    }
    @Override
    public Iterator<T> iterator() {
        return backer.iterator();
    }
    @Override
    public int size() {
        return backer.size();
    }
}