This can be:

    Map<String, List<String>> groupDict = new HashMap<String, List<String>>();

Basically you only use the fine-grained, specific subtypes when you are calling the constructor.  That gives you the ability to pass your objects into library methods that accept, e.g. `List` or `Map`.  (Most library methods will never have a specific subclass of `List` or `Map` in their method signature, since they will usually work on any type of list or map.)

(For your specific use cases here, you're not passing these objects to any library methods, so the way you have it written wouldn't hurt anything... it's just not idiomatic and would require refactoring if you did need to pass them to library methods.)