a) Practical reasons: In Java6 you had to repeat the generic parameters when calling new HashSet<>. No longer relevant for Java7.
b) It is often better to have a static method call instead of using new, because the former allows you to easily change the implementation. For example replace `return new HashSet()` with `return new SuperHighPerformanceHashSet()` in the future.