Map<String,Person> peopleByName = new HashMap<String,Person>();
Если в будущем я решу, что служебная память HashMap слишком велика, я могу сделать это в виде TreeMap и жить с немного более дорогим временем поиска
Map<String,Person> peopleByName = new TreeMap<String,Person>();
Поскольку peopleByName - это Карта, а не TreeMap или HashMap, все мои вызовы гарантированно будут работать на любой карте независимо от реализации.
Это лучше всего иллюстрируется на следующем примере
public class CatsAndDogsDrinkingMilkAndCoffee {
// what, no? :-(
}