In many use cases it is more efficient to have a getter that returns a default value instead of throwing an exception. The exception forces every consumer to call containsKey() before calling get(). In cases where the consumer wants to use a default value this is unnecessary.