¿Debería verificar si el mapa contiene Key antes de usar putIfAbsent de ConcurrentMap?

He estado usando ConcurrentMap de Java para un mapa que se puede usar desde múltiples hilos. PutIfAbsent es un gran método y es mucho más fácil de leer / escribir que usar operaciones de mapa estándar. Tengo un código que se ve así:

ConcurrentMap<String, Set<X>> map = new ConcurrentHashMap<String, Set<X>>();

// ...

map.putIfAbsent(name, new HashSet<X>());
map.get(name).add(Y);

En cuanto a la legibilidad, esto es genial, pero requiere crear un nuevo HashSet cada vez, incluso si ya está en el mapa. Podría escribir esto:

if (!map.containsKey(name)) {
    map.putIfAbsent(name, new HashSet<X>());
}
map.get(name).add(Y);

Con este cambio, pierde un poco de legibilidad, pero no necesita crear el HashSet cada vez. ¿Cuál es mejor en este caso? Tiendo a estar del lado del primero ya que es más legible. El segundo funcionaría mejor y puede ser más correcto. Tal vez hay una mejor manera de hacer esto que cualquiera de estos.

¿Cuál es la mejor práctica para usar un putIfAbsent de esta manera?

Respuestas a la pregunta(6)

Su respuesta a la pregunta