From the point of view of the methods parameters Set and Set are the same, because all instances of a generic class have the same run-time class (Set in your case), regardless of their actual type parameters. Therefore you will get a erasure error. Also at runtime both will look like...
public static void a(Set stringSet) {} AND
public static void a(Set mapSet) {}