Ich habe Javas ConcurrentMap für eine Map verwendet, die von mehreren Threads verwendet werden kann. PutIfAbsent ist eine großartige Methode und viel einfacher zu lesen / schreiben als die Verwendung von Standardkartenoperationen. Ich habe einen Code, der so aussieht:
ConcurrentMap<String, Set<X>> map = new ConcurrentHashMap<String, Set<X>>();
// ...
map.putIfAbsent(name, new HashSet<X>());
map.get(name).add(Y);
In Bezug auf die Lesbarkeit ist dies großartig, erfordert jedoch jedes Mal das Erstellen eines neuen HashSet, selbst wenn es bereits in der Karte enthalten ist. Ich könnte das schreiben:
if (!map.containsKey(name)) {
map.putIfAbsent(name, new HashSet<X>());
}
map.get(name).add(Y);
Mit dieser Änderung verliert es etwas an Lesbarkeit, muss jedoch nicht jedes Mal das HashSet erstellen. Was ist in diesem Fall besser? Ich neige dazu, mich dem ersten anzuschließen, da es besser lesbar ist. Die zweite würde besser abschneiden und könnte korrekter sein. Vielleicht gibt es einen besseren Weg, dies zu tun als beide.
Was ist die beste Vorgehensweise, um ein putIfAbsent auf diese Weise zu verwenden?