code: public static <E> SetFactory<E> mapBased(final MapFactory<E,Object> mapFact) {
  	return new SetFactory<E>() {
  	    private static final long serialVersionUID = 2323753186840412499L;
  	    
  	    public Set<E> create() { return new MapBasedSet<E>(mapFact); }
  	    
  	    public Set<E> newColl(Collection<E> c) {
  		if(c instanceof MapBasedSet/*<E>*/) {
  		    return ((MapBasedSet<E>) c).clone();
  		}
  		return super.newColl(c);
  	    }
  	};
      }
docs: Returns a set factory that generates map-backed sets.  The
  elements from the set are the keys of the map; the values they
  are mapped to do not matter; in practice, the implementation
  will never use <code>null</code> keys, so virtually any map
  factory is good as argument.
  
  @param mapFact Factory for the maps used in the representation
  of the generated sets.